home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / amiga / gcc233.lha / src-patches / gcc-2.3.3-diff next >
Text File  |  1992-12-30  |  93KB  |  2,973 lines

  1. diff -r2cN gcc-2.3.3/c-parse.y my-gcc-2.3.3/c-parse.y
  2. *** gcc-2.3.3/c-parse.y    Wed Oct  7 20:19:01 1992
  3. --- my-gcc-2.3.3/c-parse.y    Sat Nov 28 22:24:44 1992
  4. ***************
  5. *** 854,858 ****
  6.   attrib
  7.       : IDENTIFIER
  8. !     { if (strcmp (IDENTIFIER_POINTER ($1), "packed"))
  9.           warning ("`%s' attribute directive ignored",
  10.                IDENTIFIER_POINTER ($1));
  11. --- 854,865 ----
  12.   attrib
  13.       : IDENTIFIER
  14. !     {
  15. ! #ifdef HANDLE_ATTRIBUTE0
  16. !       /* give the function a chance to validate further attributes */
  17. !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) ||
  18. !           strcmp (IDENTIFIER_POINTER ($1), "packed"))
  19. ! #else
  20. !       if (strcmp (IDENTIFIER_POINTER ($1), "packed"))
  21. ! #endif
  22.           warning ("`%s' attribute directive ignored",
  23.                IDENTIFIER_POINTER ($1));
  24. diff -r2cN gcc-2.3.3/cccp.c my-gcc-2.3.3/cccp.c
  25. *** gcc-2.3.3/cccp.c    Wed Dec 30 00:11:02 1992
  26. --- my-gcc-2.3.3/cccp.c    Mon Dec 28 14:00:11 1992
  27. ***************
  28. *** 40,43 ****
  29. --- 40,57 ----
  30.   #endif /* not EMACS */
  31.   
  32. + #ifdef amigados
  33. + /* since cpp uses alloca to store all its read files, this is quite deadly
  34. +    on a system with non-automatic stackgrowth like amigados, so we better
  35. +    turn it off now..
  36. +    Note that it's not wise to generally inhibit __builtin_alloca, since
  37. +    using the generic emulator entitels a serious (!) speed penalty, and
  38. +    it's bad enough that we have to live with it in cccp, don't make cc1
  39. +    unbearably slow as well... */
  40. + #undef alloca
  41. + static int amigados_abs_file ();
  42. + #endif
  43.   #ifndef STANDARD_INCLUDE_DIR
  44.   #define STANDARD_INCLUDE_DIR "/usr/include"
  45. ***************
  46. *** 181,185 ****
  47. --- 195,203 ----
  48.   extern struct tm *localtime ();
  49.   extern int sys_nerr;
  50. + #ifndef HAVE_STRERROR
  51.   extern char *sys_errlist[];
  52. + #define strerror(err) sys_errlist[err]
  53. + #endif
  54.   
  55.   #ifndef errno
  56. ***************
  57. *** 1673,1676 ****
  58. --- 1691,1697 ----
  59.         char *p1 = p;
  60.         /* Discard all directory prefixes from P.  */
  61. + #ifdef FILE_NAME_NONDIRECTORY
  62. +       p = FILE_NAME_NONDIRECTORY (p);
  63. + #else
  64.         while (*p1) {
  65.       if (*p1 == '/')
  66. ***************
  67. *** 1678,1681 ****
  68. --- 1699,1703 ----
  69.       p1++;
  70.         }
  71. + #endif
  72.         /* Output P, but remove known suffixes.  */
  73.         len = strlen (p);
  74. ***************
  75. *** 3394,3398 ****
  76.         if (!no_output && already_output == 0
  77.         && (kt->pass_thru
  78. !           || (kt->type == T_DEFINE
  79.             && (dump_macros == dump_names
  80.                 || dump_macros == dump_definitions)))) {
  81. --- 3416,3420 ----
  82.         if (!no_output && already_output == 0
  83.         && (kt->pass_thru
  84. !           || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
  85.             && (dump_macros == dump_names
  86.                 || dump_macros == dump_definitions)))) {
  87. ***************
  88. *** 3726,3729 ****
  89. --- 3748,3763 ----
  90.   #ifndef VMS
  91.           ep = rindex (nam, '/');
  92. + #ifdef amigados
  93. +         /* amigados uses unix-style directory-filename separation, but
  94. +            has VMS-style logicals as well */
  95. +         if (ep == NULL) 
  96. +           {
  97. +         ep = rindex (nam, ':');
  98. +         /* a ':' is part of the directory name, a '/' isn't ! */
  99. +             if (ep != NULL) ep++;
  100. +           }
  101. + #endif /* amigados */
  102.   #else                /* VMS */
  103.           ep = rindex (nam, ']');
  104. ***************
  105. *** 3801,3805 ****
  106. --- 3835,3843 ----
  107.     /* If specified file name is absolute, just open it.  */
  108.   
  109. + #ifndef amigados
  110.     if (*fbeg == '/') {
  111. + #else
  112. +   if (amigados_abs_filename (fbeg, flen)) {
  113. + #endif
  114.       strncpy (fname, fbeg, flen);
  115.       fname[flen] = 0;
  116. ***************
  117. *** 3824,3827 ****
  118. --- 3862,3869 ----
  119.         continue;
  120.       strcpy (fname, searchptr->fname);
  121. + #ifdef amigados
  122. +     if (fname[strlen (fname) - 1] != ':')
  123. + #endif
  124.       strcat (fname, "/");
  125.       fname[strlen (fname) + flen] = 0;
  126. ***************
  127. *** 7638,7642 ****
  128.   
  129.     if (errno < sys_nerr)
  130. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  131.     else
  132.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  133. --- 7680,7684 ----
  134.   
  135.     if (errno < sys_nerr)
  136. !     fprintf (stderr, "%s: %s\n", name, strerror (errno));
  137.     else
  138.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  139. ***************
  140. *** 8539,8545 ****
  141.        char *name;
  142.   {
  143.     fprintf (stderr, "%s: ", progname);
  144. !   if (errno < sys_nerr)
  145. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  146.     else
  147.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  148. --- 8581,8589 ----
  149.        char *name;
  150.   {
  151. +   int error = errno;
  152.     fprintf (stderr, "%s: ", progname);
  153. !   if (error < sys_nerr)
  154. !     fprintf (stderr, "%s: %s\n", name, strerror (error));
  155.     else
  156.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  157. ***************
  158. *** 8917,8918 ****
  159. --- 8961,8986 ----
  160.   }
  161.   #endif /* VMS */
  162. + #ifdef amigados
  163. + /* This function returns whether the LEN characters long filename FNAME 
  164. +    is an absolute path specification. */
  165. + static int
  166. + amigados_abs_filename (fname, len)
  167. +      char *fname;
  168. +      int len;
  169. + {
  170. +   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
  171. +      fname[0] is to be considered absolute as well */
  172. +   if (fname[0] == '/')
  173. +     return 1;
  174. +   /* else do an index() on fname, but one which is limited to len characters */
  175. +   while (*fname && *fname != ':' && len) 
  176. +     fname++, len--;
  177. +   return *fname == ':';
  178. + }
  179. + #endif /* amigados */
  180. diff -r2cN gcc-2.3.3/config/amigados.c my-gcc-2.3.3/config/amigados.c
  181. *** gcc-2.3.3/config/amigados.c
  182. --- my-gcc-2.3.3/config/amigados.c    Sun Nov 29 13:41:42 1992
  183. ***************
  184. *** 0 ****
  185. --- 1,158 ----
  186. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  187. +    Copyright (C) 1992 Free Software Foundation, Inc.
  188. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  189. + This file is part of GNU CC.
  190. + GNU CC is free software; you can redistribute it and/or modify
  191. + it under the terms of the GNU General Public License as published by
  192. + the Free Software Foundation; either version 2, or (at your option)
  193. + any later version.
  194. + GNU CC is distributed in the hope that it will be useful,
  195. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  196. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  197. + GNU General Public License for more details.
  198. + You should have received a copy of the GNU General Public License
  199. + along with GNU CC; see the file COPYING.  If not, write to
  200. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  201. + #include "m68k.c"
  202. + /* Does operand (which is a symbolic_operand) live in text space? If
  203. +    so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
  204. +    This function is used in base relative code generation. */
  205. + int
  206. + read_only_operand (operand)
  207. +      rtx operand;
  208. + {
  209. +   if (GET_CODE (operand) == CONST)
  210. +     operand = XEXP (XEXP (operand, 0), 0);
  211. +   if (GET_CODE (operand) == SYMBOL_REF)
  212. +     return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
  213. +   return 1;
  214. + }
  215. + /* the rest of the file is to implement AmigaDOS specific keywords some day.
  216. +    The approach used so far used __attribute__ for this, but this required
  217. +    changes to c-parse.y as well as if we'd use the common keywords used
  218. +    on commercial AmigaDOS C-compilers as well. So in the future I'll probably
  219. +    switch to __saveds and __interrupt keywords as well.
  220. +    The rest of this file is currently ignored, because it's no longer
  221. +    working with the current gcc version. */
  222. + #if not_yet_working
  223. + #include "tree.h"
  224. + struct attribute {
  225. +   tree ident;
  226. +   int  saveds : 1,
  227. +        interrupt : 1;
  228. + };
  229. + static struct attribute *a_tab = 0;
  230. + static int a_index, a_size;
  231. + void
  232. + add_attr_entry (attr)
  233. +     struct attribute *attr;
  234. + {
  235. +   if (! a_tab)
  236. +     {
  237. +       a_size = 10;
  238. +       a_index = 0;
  239. +       a_tab  = (struct attribute *) xmalloc (a_size * sizeof (struct attribute));
  240. +     }
  241. +   if (a_index == a_size)
  242. +     {
  243. +       a_size <<= 1;
  244. +       a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute));
  245. +     }
  246. +   a_tab[a_index++] = *attr;
  247. + }
  248. + void
  249. + attr_do_saveds (function_ident)
  250. +       tree function_ident;
  251. + {
  252. +   struct attribute attr, *a;
  253. +   int i;
  254. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  255. +     if (a->ident == function_ident)
  256. +       {
  257. +     a->saveds = 1;
  258. +     return;
  259. +       }
  260. +   /* create a new entry for this function */
  261. +   attr.ident     = function_ident;
  262. +   attr.saveds    = 1;
  263. +   attr.interrupt = 0;
  264. +   add_attr_entry (&attr);
  265. + }
  266. + void
  267. + attr_do_interrupt (function_ident)
  268. +     tree function_ident;
  269. + {
  270. +   struct attribute attr, *a;
  271. +   int i;
  272. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  273. +     if (a->ident == function_ident)
  274. +       {
  275. +     /* __interrupt implies __saveds */
  276. +     a->saveds    = 1;
  277. +     a->interrupt = 1;
  278. +     return;
  279. +       }
  280. +   /* create a new entry for this function */
  281. +   attr.ident     = function_ident;
  282. +   attr.saveds     = 1;
  283. +   attr.interrupt = 1;
  284. +   add_attr_entry (&attr);
  285. + }
  286. + int
  287. + attr_does_saveds (function_name)
  288. +     char *function_name;
  289. + {
  290. +   tree ident = get_identifier (function_name);
  291. +   struct attribute *attr;
  292. +   int i;
  293. +   
  294. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  295. +     if (attr->ident == ident)
  296. +       return attr->saveds;
  297. +   return 0;
  298. + }
  299. + int
  300. + attr_does_interrupt (function_name)
  301. +     char *function_name;
  302. + {
  303. +   tree ident = get_identifier (function_name);
  304. +   struct attribute *attr;
  305. +   int i;
  306. +   
  307. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  308. +     if (attr->ident == ident)
  309. +       return attr->interrupt;
  310. +   return 0;
  311. + }
  312. + #endif
  313. diff -r2cN gcc-2.3.3/config/amigados.h my-gcc-2.3.3/config/amigados.h
  314. *** gcc-2.3.3/config/amigados.h
  315. --- my-gcc-2.3.3/config/amigados.h    Sat Nov 28 22:24:59 1992
  316. ***************
  317. *** 0 ****
  318. --- 1,377 ----
  319. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  320. +    Copyright (C) 1992 Free Software Foundation, Inc.
  321. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  322. + This file is part of GNU CC.
  323. + GNU CC is free software; you can redistribute it and/or modify
  324. + it under the terms of the GNU General Public License as published by
  325. + the Free Software Foundation; either version 2, or (at your option)
  326. + any later version.
  327. + GNU CC is distributed in the hope that it will be useful,
  328. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  329. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  330. + GNU General Public License for more details.
  331. + You should have received a copy of the GNU General Public License
  332. + along with GNU CC; see the file COPYING.  If not, write to
  333. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  334. + #include "m68k.h"
  335. + /* See tm-m68k.h.  0 means 68000 without 68881.  */
  336. + #ifndef TARGET_DEFAULT
  337. + #define TARGET_DEFAULT 0
  338. + #endif
  339. + /* Define __HAVE_68881__ in preprocessor according to the -m flags.
  340. +    This will control the use of inline 68881 insns in certain macros.
  341. +    Also inform the program which CPU this is for.  */
  342. + #if TARGET_DEFAULT & 02
  343. + /* -m68881 is the default */
  344. + #define CPP_SPEC \
  345. + "%{!msoft-float:-D__HAVE_68881__ }\
  346. + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
  347. + #else
  348. + /* -msoft-float is the default, assume -mc68000 as well */
  349. + #define CPP_SPEC \
  350. + "%{m68881:-D__HAVE_68881__ }\
  351. + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}"
  352. + #endif
  353. + /* -m68000 requires special flags to the assembler.  */
  354. + #if TARGET_DEFAULT & 01
  355. + #define ASM_SPEC \
  356. +  "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} "
  357. + #else
  358. + #define ASM_SPEC \
  359. +  "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} "
  360. + #endif
  361. + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA
  362. +  * was used before and is included for compatibility reasons */
  363. + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA"
  364. + /* Chose the right startup file, depending on whether we use base relative code,
  365. +    base relative code with automatic relocation (-resident), or plain crt0.o. 
  366. +   
  367. +    Profiling is currently only available for plain startup.
  368. +    mcrt0.o does not (yet) exist. */
  369. + #define STARTFILE_SPEC                    \
  370. +   "%{resident:%{!fbaserel:-L gcc:blib }}%{fbaserel:-L gcc:blib }\
  371. + %{resident:rcrt0.o%s}%{!resident:%{!fbaserel:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}%{fbaserel:%{pg:bgcrt0.o%s}%{!pg:%{p:bmcrt0.o%s}%{!p:bcrt0.o%s}}}}"
  372. + #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
  373. + /* if debugging, tell the linker to output amiga-hunk symbols *and*
  374. +    a BSD compatible debug hunk (which will probably change in the future, it's not
  375. +    tremendously useful in its current state). */
  376. + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together -datadata-reloc} "
  377. + #define CC1_SPEC "%{resident:-fbaserel} "
  378. + #define CC1PLUS_SPEC "%{resident:-fbaserel} "
  379. + /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
  380. +    GDB doesn't work under AmigaDOS at the moment anyway..) */
  381. +   
  382. + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
  383. + {                                  \
  384. +   if (OPTIMIZE >= 2)                         \
  385. +     flag_omit_frame_pointer = 1;                \
  386. + }
  387. + /* provide a dummy entry for the small-code switch. This is currently only
  388. +    needed by the assembler (explanations: m68k.h), but will be used by cc1
  389. +    to output 16bit pc-relative code later. */
  390. + #undef TARGET_SWITCHES
  391. + #define TARGET_SWITCHES  \
  392. +   { { "68020", 5},                \
  393. +     { "c68020", 5},                \
  394. +     { "68881", 2},                \
  395. +     { "bitfield", 4},                \
  396. +     { "68000", -5},                \
  397. +     { "c68000", -5},                \
  398. +     { "soft-float", -0102},            \
  399. +     { "nobitfield", -4},            \
  400. +     { "rtd", 8},                \
  401. +     { "nortd", -8},                \
  402. +     { "short", 040},                \
  403. +     { "noshort", -040},                \
  404. +     { "fpa", 0100},                \
  405. +     { "nofpa", -0100},                \
  406. +     { "sky", 0200},                \
  407. +     { "nosky", -0200},                \
  408. +     { "68040", 0407},                \
  409. +     { "68030", -01400},                \
  410. +     { "68030", 7},                \
  411. +     { "68040-only", 01000},            \
  412. +     { "small-code", 0 },            \
  413. +     { "", TARGET_DEFAULT}}
  414. + /* Every structure or union's size must be a multiple of 2 bytes.  */
  415. + #define STRUCTURE_SIZE_BOUNDARY 16
  416. + /* This is (almost;-)) BSD, so it wants DBX format.  */
  417. + #define DBX_DEBUGGING_INFO
  418. + /* Allow folding division by zero.  */
  419. + #define REAL_INFINITY
  420. + /* This is how to output an assembler line defining a `double' constant.  */
  421. + #undef ASM_OUTPUT_DOUBLE
  422. + #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                    \
  423. +   {                                    \
  424. +     if (REAL_VALUE_ISINF (VALUE))                    \
  425. +       fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  426. +     else if (isnan (VALUE))                        \
  427. +       {                                    \
  428. +     union { double d; long l[2];} t;                \
  429. +     t.d = (VALUE);                            \
  430. +     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
  431. +       }                                    \
  432. +     else                                \
  433. +       fprintf (FILE, "\t.double 0r%.17g\n", VALUE);            \
  434. +   }
  435. + /* This is how to output an assembler line defining a `float' constant.  */
  436. + #undef ASM_OUTPUT_FLOAT
  437. + #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
  438. +   {                                    \
  439. +     if (REAL_VALUE_ISINF (VALUE))                    \
  440. +       fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  441. +     else if (isnan (VALUE))                        \
  442. +       {                                    \
  443. +     union { float f; long l;} t;                    \
  444. +     t.f = (VALUE);                            \
  445. +     fprintf (FILE, "\t.long 0x%lx\n", t.l);                \
  446. +       }                                    \
  447. +     else                                \
  448. +       fprintf (FILE, "\t.single 0r%.9g\n", VALUE);            \
  449. +   }
  450. + /* This is how to output an assembler lines defining floating operands.
  451. +    There's no way to output a NaN's fraction, so we lose it.  */
  452. +   
  453. + #undef ASM_OUTPUT_FLOAT_OPERAND
  454. + #define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE)                \
  455. +   (REAL_VALUE_ISINF ((VALUE))                        \
  456. +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  457. +    : (VALUE) == -0.0                            \
  458. +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  459. +    : asm_fprintf (FILE, "%I0r%.9g", (VALUE)))
  460. + #undef ASM_OUTPUT_DOUBLE_OPERAND
  461. + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  462. +   (REAL_VALUE_ISINF ((VALUE))                        \
  463. +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  464. +    : (VALUE) == -0.0                            \
  465. +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  466. +    : asm_fprintf (FILE, "%I0r%.17g", (VALUE)))
  467. + /* use A5 as framepointer instead of A6, this makes A6 available as a
  468. +    general purpose register, and can thus be used without problems in
  469. +    direct library calls. */
  470. + #undef FRAME_POINTER_REGNUM
  471. + #define FRAME_POINTER_REGNUM 13
  472. + #undef ARG_POINTER_REGNUM
  473. + #define ARG_POINTER_REGNUM 13
  474. + /* we use A4 for this, not A5, which is the framepointer */
  475. + #undef PIC_OFFSET_TABLE_REGNUM
  476. + #define PIC_OFFSET_TABLE_REGNUM 12
  477. + /* setup a default shell return value for those (gazillion..) programs that
  478. +    (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
  479. +    cause the shell to randomly caugh upon executing such programs (contrary
  480. +    to Unix, AmigaDOS scripts are terminated with an error if a program returns
  481. +    with an error code above the `error' or even `failure' level
  482. +    (which is configurable with the FAILAT command) */
  483. + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
  484. + /* we do have an ansi-compliant c-library ;-) */
  485. + #define HAVE_VPRINTF
  486. + #define HAVE_VFPRINTF
  487. + #define HAVE_PUTENV
  488. + #define HAVE_STRERROR
  489. + #define HAVE_ATEXIT
  490. + /* given that symbolic_operand(X), return TRUE if no special
  491. +    base relative relocation is necessary */
  492. + #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  493. +   (flag_pic >= 3 && read_only_operand (X))
  494. + #undef LEGITIMATE_PIC_OPERAND_P
  495. + #define LEGITIMATE_PIC_OPERAND_P(X) \
  496. +   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  497. + /* Define this macro if references to a symbol must be treated
  498. +    differently depending on something about the variable or
  499. +    function named by the symbol (such as what section it is in).
  500. +    The macro definition, if any, is executed immediately after the
  501. +    rtl for DECL or other node is created.
  502. +    The value of the rtl will be a `mem' whose address is a
  503. +    `symbol_ref'.
  504. +    The usual thing for this macro to do is to a flag in the
  505. +    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  506. +    name string in the `symbol_ref' (if one bit is not enough
  507. +    information).
  508. +    On the Amiga we use this to indicate if a symbol is in text or
  509. +    data space.  */
  510. + #define ENCODE_SECTION_INFO(DECL)\
  511. + do                                    \
  512. +   {                                    \
  513. +     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  514. +       SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;            \
  515. +     else                                \
  516. +       {                                    \
  517. +     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  518. +            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  519. +     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  520. +       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  521. +       }                                    \
  522. +   }                                    \
  523. + while (0)
  524. + #undef SELECT_RTX_SECTION
  525. + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  526. + /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  527. +    are addressed by address. This doesn't matter in baserelative code,
  528. +    so we allow (inspite of flag_pic) readonly_data_section() in that
  529. +    case */
  530. + #undef SELECT_SECTION
  531. + #define SELECT_SECTION(DECL, RELOC)                    \
  532. + {                                    \
  533. +   if (TREE_CODE (DECL) == STRING_CST)                    \
  534. +     {                                    \
  535. +       if (! flag_writable_strings)                    \
  536. +     readonly_data_section ();                    \
  537. +       else                                \
  538. +     data_section ();                        \
  539. +     }                                    \
  540. +   else if (TREE_CODE (DECL) == VAR_DECL)                \
  541. +     {                                    \
  542. +       if ((flag_pic && flag_pic < 3 && RELOC)                \
  543. +       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  544. +     data_section ();                        \
  545. +       else                                \
  546. +     readonly_data_section ();                    \
  547. +     }                                    \
  548. +   else                                    \
  549. +     readonly_data_section ();                        \
  550. + }
  551. + #if not_yet_working
  552. + /* starting support for amiga specific keywords
  553. +  * --------------------------------------------
  554. +  */
  555. + /* validate attributes that don't take a parameter. Currently we support
  556. +  * __attribute__ (saveds) and __attribute__ (interrupt)
  557. +  */
  558. + #define HANDLE_ATTRIBUTE0(attr) \
  559. +   (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0)
  560. + /* (c-common.c)
  561. +  * install additional attributes
  562. +  */
  563. + #define HANDLE_EXTRA_ATTRIBUTES(a)                         \
  564. +   if (TREE_VALUE (a) != 0                            \
  565. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  566. +       && TREE_VALUE (a) == get_identifier ("saveds"))                \
  567. +     {                                        \
  568. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  569. +         {                                    \
  570. +           warning_with_decl (decl,                        \
  571. +               "saveds attribute specified for non-function `%s'");        \
  572. +       return;                                \
  573. +         }                                    \
  574. +                                               \
  575. +       attr_do_saveds (DECL_NAME (decl));                    \
  576. +     }                                        \
  577. +   else if (TREE_VALUE (a) != 0                            \
  578. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  579. +       && TREE_VALUE (a) == get_identifier ("interrupt"))            \
  580. +     {                                        \
  581. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  582. +         {                                    \
  583. +           warning_with_decl (decl,                        \
  584. +               "saveds attribute specified for non-function `%s'");        \
  585. +       return;                                \
  586. +         }                                    \
  587. +                                               \
  588. +       attr_do_interrupt (DECL_NAME (decl));                    \
  589. +     }                                        \
  590. + #define PROLOGUE_EXTRA_SAVE(mask)                        \
  591. +   { extern char *current_function_name;                        \
  592. +     /* saveds makes the function preserve d1/a0/a1 as well */            \
  593. +     if (attr_does_saveds (current_function_name))                \
  594. +       mask |= 0x40c0; }                                \
  595. + #define EPILOGUE_EXTRA_RESTORE(mask, nregs)                    \
  596. +   { extern char *current_function_name;                        \
  597. +     /* restore those extra registers */                        \
  598. +     if (attr_does_saveds (current_function_name))                \
  599. +       {                                        \
  600. +     mask |= 0x0302;                                \
  601. +     nregs += 3;                                \
  602. +       } }                                    \
  603. + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream)                    \
  604. +   { extern char *current_function_name;                        \
  605. +     /* PLEASE Help! how is this done cleaner?? */                \
  606. +     if (attr_does_saveds (current_function_name))                \
  607. +       {                                        \
  608. +     fprintf (stderr,                             \
  609. +          "warning: couldn't cleanup `saveds'-stack in `%s'.\n");    \
  610. +     fprintf (stderr,                            \
  611. +          "         this is only ok, if the function never returns!\n");    \
  612. +       }    }                                    \
  613. +         
  614. + #define EPILOGUE_EXTRA_TEST(stream)                        \
  615. +   { extern char *current_function_name;                        \
  616. +     /* with the interrupt-attribute, we have to set the cc before rts */    \
  617. +     if (attr_does_interrupt (current_function_name))                \
  618. +       asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); }            \
  619. + #endif
  620. diff -r2cN gcc-2.3.3/config/m68k.c my-gcc-2.3.3/config/m68k.c
  621. *** gcc-2.3.3/config/m68k.c    Fri Oct 30 01:00:58 1992
  622. --- my-gcc-2.3.3/config/m68k.c    Sun Nov 29 13:39:58 1992
  623. ***************
  624. *** 61,65 ****
  625.   finalize_pic ()
  626.   {
  627. !   if (flag_pic && current_function_uses_pic_offset_table)
  628.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  629.   }
  630. --- 61,65 ----
  631.   finalize_pic ()
  632.   {
  633. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  634.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  635.   }
  636. ***************
  637. *** 181,184 ****
  638. --- 181,187 ----
  639.         num_saved_regs--;
  640.       }
  641. + #ifdef PROLOGUE_EXTRA_SAVE
  642. +   PROLOGUE_EXTRA_SAVE (mask);
  643. + #endif
  644.   
  645.   #if NEED_PROBE
  646. ***************
  647. *** 214,218 ****
  648.   #endif
  649.       }
  650. !   if (flag_pic && current_function_uses_pic_offset_table)
  651.       {
  652.   #ifdef MOTOROLA
  653. --- 217,221 ----
  654.   #endif
  655.       }
  656. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  657.       {
  658.   #ifdef MOTOROLA
  659. ***************
  660. *** 282,285 ****
  661. --- 285,291 ----
  662.        about which function the pc is in at this address.  */
  663.         asm_fprintf (stream, "\tnop\n");
  664. + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE
  665. +       EPILOGUE_EXTRA_BARRIER_KLUDGE(stream);
  666. + #endif
  667.         return;
  668.       }
  669. ***************
  670. *** 312,315 ****
  671. --- 318,324 ----
  672.       mask |= 1 << regno;
  673.         }
  674. + #ifdef EPILOGUE_EXTRA_RESTORE
  675. +   EPILOGUE_EXTRA_RESTORE(mask, nregs);
  676. + #endif
  677.     offset = foffset + nregs * 4;
  678.     if (offset + fsize >= 0x8000
  679. ***************
  680. *** 514,517 ****
  681. --- 523,529 ----
  682.       }
  683.       }
  684. + #ifdef EPILOGUE_EXTRA_TEST
  685. +   EPILOGUE_EXTRA_TEST(stream);
  686. + #endif
  687.     if (current_function_pops_args)
  688.       asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
  689. ***************
  690. *** 804,816 ****
  691.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  692.       {
  693.         if (reg == 0)
  694.       abort ();
  695.   
  696. !       pic_ref = gen_rtx (MEM, Pmode,
  697. !              gen_rtx (PLUS, Pmode,
  698. !                   pic_offset_table_rtx, orig));
  699.         current_function_uses_pic_offset_table = 1;
  700.         RTX_UNCHANGING_P (pic_ref) = 1;
  701.         emit_move_insn (reg, pic_ref);
  702.         return reg;
  703.       }
  704. --- 816,838 ----
  705.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  706.       {
  707. + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  708. +   if (LEGITIMATE_BASEREL_OPERAND_P (orig))
  709. +     return orig;
  710. + #endif
  711.         if (reg == 0)
  712.       abort ();
  713.   
  714. !       if (flag_pic >= 3)
  715. !     pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
  716. !       else
  717. !         pic_ref = gen_rtx (MEM, Pmode,
  718. !                gen_rtx (PLUS, Pmode,
  719. !                     pic_offset_table_rtx, orig));
  720.         current_function_uses_pic_offset_table = 1;
  721.         RTX_UNCHANGING_P (pic_ref) = 1;
  722.         emit_move_insn (reg, pic_ref);
  723.         return reg;
  724.       }
  725. ***************
  726. *** 841,844 ****
  727. --- 863,867 ----
  728.         /* Likewise, should we set special REG_NOTEs here?  */
  729.       }
  730.     return pic_ref;
  731.   }
  732. ***************
  733. *** 1888,1891 ****
  734. --- 1911,1918 ----
  735.               if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
  736.                 fprintf (file, ":l");
  737. +             if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
  738. +               fprintf (file, ":W");
  739. +             if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
  740. +               fprintf (file, ":L");
  741.             }
  742.           if (addr != 0 && ireg != 0)
  743. diff -r2cN gcc-2.3.3/config/m68k.h my-gcc-2.3.3/config/m68k.h
  744. *** gcc-2.3.3/config/m68k.h    Thu Oct 22 07:12:03 1992
  745. --- my-gcc-2.3.3/config/m68k.h    Sat Nov 28 22:25:06 1992
  746. ***************
  747. *** 328,334 ****
  748.   
  749.   #define CONDITIONAL_REGISTER_USAGE \
  750. ! {                                               \
  751. !   if (flag_pic)                                 \
  752. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
  753.   }
  754.   
  755. --- 328,337 ----
  756.   
  757.   #define CONDITIONAL_REGISTER_USAGE \
  758. ! {                                                \
  759. !   if (flag_pic)                                  \
  760. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;     \
  761. !   /* prevent saving/restoring of the base reg */ \
  762. !   if (flag_pic == 3)                 \
  763. !     call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
  764.   }
  765.   
  766. diff -r2cN gcc-2.3.3/config/m68k.md my-gcc-2.3.3/config/m68k.md
  767. *** gcc-2.3.3/config/m68k.md    Mon Sep 28 13:37:59 1992
  768. --- my-gcc-2.3.3/config/m68k.md    Sat Nov 28 22:25:11 1992
  769. ***************
  770. *** 705,715 ****
  771.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  772.       {
  773. !       /* The source is an address which requires PIC relocation.  
  774. !          Call legitimize_pic_address with the source, mode, and a relocation
  775. !          register (a new pseudo, or the final destination if reload_in_progress
  776. !          is set).   Then fall through normally */
  777. !       extern rtx legitimize_pic_address();
  778. !       rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  779. !       operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  780.       }
  781.   }")
  782. --- 705,720 ----
  783.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  784.       {
  785. ! #ifdef LEGITIMATE_BASEREL_OPERAND_P
  786. !       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  787. ! #endif
  788. !       {
  789. !         /* The source is an address which requires PIC relocation.  
  790. !            Call legitimize_pic_address with the source, mode, and a relocation
  791. !            register (a new pseudo, or the final destination if reload_in_progress
  792. !            is set).   Then fall through normally */
  793. !         extern rtx legitimize_pic_address();
  794. !         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  795. !         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  796. !       }
  797.       }
  798.   }")
  799. ***************
  800. *** 1712,1717 ****
  801.         /* These insns can result from reloads to access
  802.        stack slots over 64k from the frame pointer.  */
  803. !       if (GET_CODE (operands[2]) == CONST_INT
  804. !       && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
  805.           return \"move%.l %2,%0\;add%.l %1,%0\";
  806.   #ifdef SGS
  807. --- 1717,1723 ----
  808.         /* These insns can result from reloads to access
  809.        stack slots over 64k from the frame pointer.  */
  810. !       if (((GET_CODE (operands[2]) == CONST_INT
  811. !        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  812. !       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  813.           return \"move%.l %2,%0\;add%.l %1,%0\";
  814.   #ifdef SGS
  815. ***************
  816. *** 4652,4656 ****
  817.     "
  818.   {
  819. !   if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  820.       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  821.                  force_reg (Pmode, XEXP (operands[0], 0)));
  822. --- 4658,4662 ----
  823.     "
  824.   {
  825. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  826.       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  827.                  force_reg (Pmode, XEXP (operands[0], 0)));
  828. ***************
  829. *** 4663,4667 ****
  830.     ;; Operand 1 not really used on the m68000.
  831.   
  832. !   "! flag_pic"
  833.     "*
  834.   #ifdef MOTOROLA
  835. --- 4669,4673 ----
  836.     ;; Operand 1 not really used on the m68000.
  837.   
  838. !   "(! flag_pic || flag_pic >= 3)"
  839.     "*
  840.   #ifdef MOTOROLA
  841. ***************
  842. *** 4678,4682 ****
  843.     ;; Operand 1 not really used on the m68000.
  844.   
  845. !   "flag_pic"
  846.     "*
  847.     return \"jsr %0\";
  848. --- 4684,4688 ----
  849.     ;; Operand 1 not really used on the m68000.
  850.   
  851. !   "(flag_pic && flag_pic < 3)"
  852.     "*
  853.     return \"jsr %0\";
  854. ***************
  855. *** 4694,4698 ****
  856.     "
  857.   {
  858. !   if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  859.       operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  860.                  force_reg (Pmode, XEXP (operands[1], 0)));
  861. --- 4700,4704 ----
  862.     "
  863.   {
  864. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  865.       operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  866.                  force_reg (Pmode, XEXP (operands[1], 0)));
  867. ***************
  868. *** 4705,4709 ****
  869.             (match_operand:SI 2 "general_operand" "g")))]
  870.     ;; Operand 2 not really used on the m68000.
  871. !   "! flag_pic"
  872.     "*
  873.   #ifdef MOTOROLA
  874. --- 4711,4715 ----
  875.             (match_operand:SI 2 "general_operand" "g")))]
  876.     ;; Operand 2 not really used on the m68000.
  877. !   "(! flag_pic || flag_pic >= 3)"
  878.     "*
  879.   #ifdef MOTOROLA
  880. ***************
  881. *** 4720,4724 ****
  882.             (match_operand:SI 2 "general_operand" "g")))]
  883.     ;; Operand 2 not really used on the m68000.
  884. !   "flag_pic"
  885.     "*
  886.     return \"jsr %1\";
  887. --- 4726,4730 ----
  888.             (match_operand:SI 2 "general_operand" "g")))]
  889.     ;; Operand 2 not really used on the m68000.
  890. !   "(flag_pic && flag_pic < 3)"
  891.     "*
  892.     return \"jsr %1\";
  893. diff -r2cN gcc-2.3.3/config/t-amigados my-gcc-2.3.3/config/t-amigados
  894. *** gcc-2.3.3/config/t-amigados
  895. --- my-gcc-2.3.3/config/t-amigados    Sat Nov 28 22:25:13 1992
  896. ***************
  897. *** 0 ****
  898. --- 1,81 ----
  899. + # compilation rules for target amigados. We generate two additional things:
  900. + # libngcc.a: a `normal' library, the automatically generated libgcc.a is
  901. + #            base relative (which is the right thing, since it's used to
  902. + #         generate further generations of compilers).
  903. + # gccs:         a gcc calling ssytem() instead of forking. This makes it more
  904. + #         system conformant, at the cost of reduced functionality (no
  905. + #         -pipe option).
  906. + # the provided file is POSIX compliant
  907. + LIMITS_H =
  908. + # we don't need a libgcc1, it's all in ixemul.library
  909. + LIBGCC1 = libgcc1.null
  910. + # use flags that don't generate base relative objects. So -resident
  911. + # would be a bad idea..
  912. + LIBNGCC2_CFLAGS = -O2 $(INTERNAL_CFLAGS) $(CFLAGS) -B./
  913. + # this is later copied into gcc:compilers/amiga/<version>/libgcc.a, whereas
  914. + # libgcc.a is copied into gcc:blib/libgcc.a, which is searched first if we're
  915. + # compiling/linking base relative
  916. + EXTRA_PARTS = libngcc.a
  917. + # this includes the knowledge that target amigados doesn't need 
  918. + # libgcc1.a at all
  919. + libngcc.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
  920. +    longlong.h gbl-ctors.h config.status
  921. + # Actually build it in tmplibngcc.a, then rename at end,
  922. + # so that libngcc.a itself remains nonexistent if compilation is aborted.
  923. +     -rm -f tmplibngcc.a
  924. + # -e causes any failing command to make this rule fail.
  925. + # -e doesn't work in certain shells, so we test $$? as well.
  926. +     set -e; \
  927. +     for name in $(LIB2FUNCS); \
  928. +     do \
  929. +       echo $${name}; \
  930. +       $(GCC_FOR_TARGET) $(LIBNGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
  931. +           $(srcdir)/libgcc2.c -o $${name}.o; \
  932. +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  933. +       $(AR) $(AR_FLAGS) tmplibngcc.a $${name}.o; \
  934. +       rm -f $${name}.o; \
  935. +     done
  936. + # Some shells crash when a loop has no items.
  937. + # So make sure there is always at least one--`..'.
  938. + # Then ignore it.
  939. + # We don't use -e here because there are if statements
  940. + # that should not make the command give up when the if condition is false.
  941. + # Instead, we test for failure after each command where it matters.
  942. +     -for file in .. $(LIB2FUNCS_EXTRA); \
  943. +     do \
  944. +       if [ x$${file} != x.. ]; then \
  945. +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  946. +         echo $${name}; \
  947. +         if [ $${name}.asm = $${file} ]; then \
  948. +           cp $${file} $${name}.s; file=$${name}.s; \
  949. +           if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  950. +         else true; fi; \
  951. +         $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
  952. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  953. +         $(AR) $(AR_FLAGS) tmplibngcc.a $${name}.o; \
  954. +         rm -f $${name}.[so]; \
  955. +       else true; \
  956. +       fi; \
  957. +     done
  958. +     mv tmplibngcc.a libngcc.a
  959. +     ranlib libngcc.a
  960. + T_CPPFLAGS = -DAMIGADOS_FORK_GCC
  961. + # the default gcc (xgcc) specifies -DAMIGADOS_FORK_GCC. This gcc (gccs) does not.
  962. + EXTRA_PASSES = gccs
  963. + gccs: gccs.o version.o $(LIBDEPS)
  964. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o gccs gccs.o version.o $(LIBS)
  965. + # omit the T_CPPFLAGS here on purpose to get rid of -DAMIGADOS_FORK_GCC
  966. + gccs.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h
  967. +     $(CC) $(ALL_CFLAGS) $(CPPFLAGS) $(X_CPPFLAGS) $(INCLUDES) \
  968. +   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
  969. +   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  970. +   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
  971. +   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o gccs.o
  972. diff -r2cN gcc-2.3.3/config/x-amigados my-gcc-2.3.3/config/x-amigados
  973. *** gcc-2.3.3/config/x-amigados
  974. --- my-gcc-2.3.3/config/x-amigados    Sat Nov 28 22:25:15 1992
  975. ***************
  976. *** 0 ****
  977. --- 1,50 ----
  978. + # building under amigados requires an already working gcc. You can of course
  979. + # try to reinvent the wheel, get sun2manx and try to do a crosscompile from a
  980. + # sun3, like I did some years ago...
  981. + CC = gccv # this is a gcc compiled with AMIGADOS_FORK_GCC
  982. + # if your gcc has not been compiled with -DAMIGADOS_FORK_GCC, then don't use
  983. + # -pipe! (see also t-amigados !)
  984. + # The -fno-builtin is necessary, or gcc uses the builtin alloca() by default,
  985. + # and we can't undef it for cpp
  986. + X_CFLAGS = -O2 -resident -pipe -fno-builtin
  987. + exec_prefix = gcc:compilers
  988. + bindir = gcc:bin
  989. + libdir = gcc:lib
  990. + manext = .0
  991. + mandir = gcc:man/man1
  992. + # don't compile with debugging, as long as there is no debugger...
  993. + LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS)
  994. + # we really shouldn't specify CFLAGS from here, but there's no other way
  995. + # to get rid of the `-g' indoctrinated by Makefile.in...
  996. + CFLAGS =
  997. + RANLIB_TEST = true
  998. + RANLIB = ranlib
  999. + # override the default compilation rule for libgcc.a, since the original
  1000. + # rule doesn't work well with the amigados ksh (the subshell cd'ing into
  1001. + # tmplibgcc is still running when the rm -fr tmplibgcc is started, and at
  1002. + # that point trying to remove the directory fails because the previous
  1003. + # process still keeps a lock (its current directory) to that directory).
  1004. + # Combine the various libraries into a single library, libgcc.a.
  1005. + libgcc.a: $(LIBGCC1) $(LIBGCC2)
  1006. +     -rm -rf tmplibgcc.a libgcc.a tmpcopy
  1007. +     mkdir tmpcopy
  1008. +     -if [ x$(LIBGCC1) != x ];            \
  1009. +     then (cd tmpcopy; $(AR) x ../$(LIBGCC1));    \
  1010. +     else true;                    \
  1011. +     fi
  1012. + # the cd .. make sure there's no lock left on tmpcopy (this is actually a
  1013. + # bug in ixemul.library, but I can't get around it currently because it
  1014. + # involves an OS bug which is beyond my capabilities to fix...)
  1015. +     (cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2)
  1016. +     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2)
  1017. +     rm -rf tmpcopy
  1018. +     -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  1019. + # Actually build it in tmplibgcc.a, then rename at end,
  1020. + # so that libgcc.a itself remains nonexistent if compilation is aborted.
  1021. +     mv tmplibgcc.a libgcc.a
  1022. diff -r2cN gcc-2.3.3/config/xm-amigados.h my-gcc-2.3.3/config/xm-amigados.h
  1023. *** gcc-2.3.3/config/xm-amigados.h
  1024. --- my-gcc-2.3.3/config/xm-amigados.h    Sat Nov 28 22:25:17 1992
  1025. ***************
  1026. *** 0 ****
  1027. --- 1,234 ----
  1028. + /*  Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
  1029. +    Copyright (C) 1992 Free Software Foundation, Inc.
  1030. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  1031. + This file is part of GNU CC.
  1032. + GNU CC is free software; you can redistribute it and/or modify
  1033. + it under the terms of the GNU General Public License as published by
  1034. + the Free Software Foundation; either version 2, or (at your option)
  1035. + any later version.
  1036. + GNU CC is distributed in the hope that it will be useful,
  1037. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  1038. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1039. + GNU General Public License for more details.
  1040. + You should have received a copy of the GNU General Public License
  1041. + along with GNU CC; see the file COPYING.  If not, write to
  1042. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  1043. + /* first include the generic header, then modify some parts.. */
  1044. + #include "xm-m68k.h"
  1045. + #undef GCC_INCLUDE_DIR
  1046. + #define GCC_INCLUDE_DIR ":GCC_INCLUDE_DIR is not used under AmigaDOS!:"
  1047. + /* use this list of header files instead of the Unix'ish default */
  1048. + #define INCLUDE_DEFAULTS \
  1049. + {                                    \
  1050. +   { "gcc:g++-include", 1},                        \
  1051. +   { "gcc:gcc-include", 0}, /* gcc-specific changes to system headers. none currently.. */ \
  1052. +   { "gcc:os-include", 0},  /* here go amiga specific headers */     \
  1053. +   { "gcc:include", 0},     /* here go the usual headers */         \
  1054. +   { 0, 0}                                \
  1055. + }
  1056. + /* here live the compiler passes like cc1, cc1plus, cpp etc */
  1057. + #undef STANDARD_EXEC_PREFIX
  1058. + #define STANDARD_EXEC_PREFIX "gcc:compilers/"
  1059. + /* here live (%|b|r)crt0.o and different flavors of link-libraries */
  1060. + #undef STANDARD_STARTFILE_PREFIX
  1061. + #define STANDARD_STARTFILE_PREFIX "gcc:lib/"
  1062. + /* the `compilers' place looks better, since we have the machine/version tree
  1063. +    there, and not in `lib'. */
  1064. + #undef STD_PROTO_DIR
  1065. + #define STD_PROTO_DIR STANDARD_EXEC_PREFIX
  1066. + /* Fork one piped subcommand.  SEARCH_FLAG is the system call to use
  1067. +    (either execv or execvp).  ARGV is the arg vector to use.
  1068. +    NOT_LAST is nonzero if this is not the last subcommand
  1069. +    (i.e. its output should be piped to the next one.)  */
  1070. + #ifndef AMIGADOS_FORK_GCC
  1071. + /* this version uses a more or less amigados-conformant way of running a
  1072. +    program (in the context of the parent). If you want to use -pipe however,
  1073. +    you'll have to use the vfork() version afterwards. */
  1074. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  1075. + ({char *_argline;                        \
  1076. +   int _arglinelength, _i;                    \
  1077. +                                 \
  1078. +   for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i)        \
  1079. +     _arglinelength += strlen(ARGV[_i]) + 1;            \
  1080. +                                 \
  1081. +   _arglinelength += strlen(PROGRAM) + 1;            \
  1082. +                                 \
  1083. +   if (!(_argline = (char *)alloca(_arglinelength)))         \
  1084. +     pfatal_with_name ("alloca");                \
  1085. +                                 \
  1086. +   strcpy(_argline, PROGRAM);                    \
  1087. +   for (_i = 1; ARGV[_i]; ++_i)                     \
  1088. +     {                                \
  1089. +       strcat(_argline, " ");                    \
  1090. +       strcat(_argline, ARGV[_i]);                \
  1091. +     }                                \
  1092. +                                 \
  1093. +   ssystem(_argline); })                        \
  1094. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  1095. +   ({ STATUS = COMMAND.pid; })
  1096. + #else
  1097. + /* the vfork() version. This one has the drawback, that gcc is not 
  1098. +    interruptible when started from make, since ixemul.library doesn't yet
  1099. +    propagate ^C to subprocesses. */
  1100. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  1101. + ({int (*_func)() = (SEARCH_FLAG ? execv : execvp);            \
  1102. +   int _pid;                                \
  1103. +   int _pdes[2];                                \
  1104. +   int _input_desc = last_pipe_input;                    \
  1105. +   int _output_desc = STDOUT_FILE_NO;                    \
  1106. +   int _retries, _sleep_interval, _result;                \
  1107. +                                     \
  1108. +   /* If this isn't the last process, make a pipe for its output,    \
  1109. +      and record it as waiting to be the input to the next process.  */    \
  1110. +                                     \
  1111. +   if (NOT_LAST)                                \
  1112. +     {                                    \
  1113. +       if (pipe (_pdes) < 0)                        \
  1114. +     pfatal_with_name ("pipe");                    \
  1115. +       _output_desc = _pdes[WRITE_PORT];                    \
  1116. +       last_pipe_input = _pdes[READ_PORT];                \
  1117. +     }                                    \
  1118. +   else                                    \
  1119. +     last_pipe_input = STDIN_FILE_NO;                    \
  1120. +                                     \
  1121. +   /* Fork a subprocess; wait and retry if it fails.  */            \
  1122. +   _sleep_interval = 1;                            \
  1123. +   for (_retries = 0; _retries < 4; _retries++)                \
  1124. +     {                                    \
  1125. +       _pid = vfork ();                            \
  1126. +       if (_pid >= 0)                            \
  1127. +     break;                                \
  1128. +       sleep (_sleep_interval);                        \
  1129. +       _sleep_interval *= 2;                        \
  1130. +     }                                    \
  1131. +                                     \
  1132. +   switch (_pid)                                \
  1133. +     {                                    \
  1134. +     case -1:                                \
  1135. +       pfatal_with_name ("vfork");                    \
  1136. +       /* NOTREACHED */                            \
  1137. +       _result = 0;                            \
  1138. +       break;                                \
  1139. +                                     \
  1140. +     case 0: /* child */                            \
  1141. +       /* Move the input and output pipes into place, if nec.  */    \
  1142. +       if (_input_desc != STDIN_FILE_NO)                    \
  1143. +     {                                \
  1144. +       close (STDIN_FILE_NO);                    \
  1145. +       dup (_input_desc);                        \
  1146. +       close (_input_desc);                        \
  1147. +     }                                \
  1148. +       if (_output_desc != STDOUT_FILE_NO)                \
  1149. +     {                                \
  1150. +       close (STDOUT_FILE_NO);                    \
  1151. +       dup (_output_desc);                        \
  1152. +       close (_output_desc);                        \
  1153. +     }                                \
  1154. +                                     \
  1155. +       /* Close the parent's descs that aren't wanted here.  */        \
  1156. +       if (last_pipe_input != STDIN_FILE_NO)                \
  1157. +     close (last_pipe_input);                    \
  1158. +                                     \
  1159. +       /* Exec the program.  */                        \
  1160. +       (*_func) (PROGRAM, ARGV);                        \
  1161. +       perror_exec (PROGRAM);                        \
  1162. +       exit (-1);                            \
  1163. +       /* NOTREACHED */                            \
  1164. +       _result = 0;                            \
  1165. +       break;                                \
  1166. +                                     \
  1167. +     default:                                \
  1168. +       /* In the parent, after forking.                    \
  1169. +      Close the descriptors that we made for this child.  */        \
  1170. +       if (_input_desc != STDIN_FILE_NO)                    \
  1171. +     close (_input_desc);                        \
  1172. +       if (_output_desc != STDOUT_FILE_NO)                \
  1173. +     close (_output_desc);                        \
  1174. +                                     \
  1175. +       /* Return child's process number.  */                \
  1176. +       _result = _pid;                            \
  1177. +       break;                                \
  1178. +     }                                     \
  1179. + _result; })                                \
  1180. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  1181. +   ({ wait (& STATUS); })
  1182. + #endif /* AMIGADOS_FORK_GCC */
  1183. + /* the following macros are stolen more or less from xm-vms.h ... */
  1184. + /* This macro is used to help compare filenames in cp-lex.c.
  1185. +    We also need to make sure that the names are all lower case, because
  1186. +    we must be able to compare filenames to determine if a file implements
  1187. +    a class.  */
  1188. + #define FILE_NAME_NONDIRECTORY(C)                \
  1189. + ({                                \
  1190. +    char * pnt_ = (C), * pnt1_;                    \
  1191. +    pnt1_ = pnt_ - 1;                        \
  1192. +    while (*++pnt1_)                        \
  1193. +      if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20;    \
  1194. +    pnt1_ = rindex (pnt_, '/');                     \
  1195. +    pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_);        \
  1196. +    (pnt1_ == 0 ? pnt_ : pnt1_ + 1);                \
  1197. +  })
  1198. + /* Macro to generate the name of the cross reference file.  The standard
  1199. +    one does not work, since it was written assuming that the conventions
  1200. +    of a unix style filesystem will work on the host system.
  1201. +  
  1202. +    Contrary to VMS, I'm using the original unix filename, there's no reason
  1203. +    not to use this under AmigaDOS. */
  1204. + #define XREF_FILE_NAME(BUFF, NAME)    \
  1205. +   s = FILE_NAME_NONDIRECTORY (NAME);            \
  1206. +   if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME);    \
  1207. +   else {                        \
  1208. +     unsigned char ch = *s; /* could be Latin1 char.. */    \
  1209. +     /* temporary: cut the filename from the directory */\
  1210. +     *s = 0;                        \
  1211. +     sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1);    \
  1212. +     /* and restore the filename */            \
  1213. +     *s = ch;                        \
  1214. +   }                            \
  1215. + /* Macro that is used in cp-xref.c to determine whether a file name is
  1216. +    absolute or not.
  1217. +    This checks for both, '/' as first character, since we're running under
  1218. +    ixemul.library which provides for this unix'ism, and for the usual 
  1219. +    logical-terminator, ':', somewhere in the filename. */
  1220. + #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
  1221. + /* the colon conflicts with the name space of logicals */
  1222. + #define PATH_SEPARATOR ','
  1223. + /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
  1224. +    hacks. It's actually the inverse case as on Unix. rename(2) was always
  1225. +    there, link(2) is new with OS 2.0 */
  1226. + #define HAVE_rename 1
  1227. diff -r2cN gcc-2.3.3/configure my-gcc-2.3.3/configure
  1228. *** gcc-2.3.3/configure    Wed Dec 30 00:12:04 1992
  1229. --- my-gcc-2.3.3/configure    Mon Dec 28 14:01:50 1992
  1230. ***************
  1231. *** 477,480 ****
  1232. --- 477,487 ----
  1233.           broken_install=yes
  1234.           ;;
  1235. +     m68k-*-amigados)
  1236. +         xm_file=xm-amigados.h
  1237. +         out_file=amigados.c
  1238. +         tm_file=amigados.h
  1239. +         tmake_file=t-amigados
  1240. +         xmake_file=x-amigados
  1241. +         ;;
  1242.       m68k-cbm-sysv4*)        # Commodore variant of V.4.
  1243.           tm_file=amix.h
  1244. diff -r2cN gcc-2.3.3/expr.c my-gcc-2.3.3/expr.c
  1245. *** gcc-2.3.3/expr.c    Sat Nov 28 22:08:51 1992
  1246. --- my-gcc-2.3.3/expr.c    Sat Nov 28 22:25:30 1992
  1247. ***************
  1248. *** 1978,1981 ****
  1249. --- 1978,1987 ----
  1250.     argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
  1251.   
  1252. + /* how would you do this RIGHT ?? fake a DECL node? dunno... */
  1253. + #ifdef ENCODE_SECTION_INFO
  1254. +   /* mark it as a function (to be in the text section that is) */
  1255. +   SYMBOL_REF_FLAG (fun) = 1;
  1256. + #endif
  1257.     INIT_CUMULATIVE_ARGS (args_so_far, (tree)0, fun);
  1258.   
  1259. diff -r2cN gcc-2.3.3/gcc.c my-gcc-2.3.3/gcc.c
  1260. *** gcc-2.3.3/gcc.c    Wed Dec 30 00:12:54 1992
  1261. --- my-gcc-2.3.3/gcc.c    Mon Dec 28 14:02:56 1992
  1262. ***************
  1263. *** 105,109 ****
  1264. --- 105,113 ----
  1265.   
  1266.   extern int errno, sys_nerr;
  1267. + #ifndef HAVE_STRERROR
  1268. + /* provide a cheap strerror() emulator for those that don't have it */
  1269.   extern char *sys_errlist[];
  1270. + #define strerror(err) sys_errlist[err]
  1271. + #endif
  1272.   
  1273.   extern int execv (), execvp ();
  1274. ***************
  1275. *** 1127,1130 ****
  1276. --- 1131,1137 ----
  1277.         if (base == (char *)0)
  1278.       {
  1279. + #ifdef amigados
  1280. +       base = "ram:";
  1281. + #else
  1282.         if (access ("/usr/tmp", R_OK | W_OK) == 0)
  1283.           base = "/usr/tmp/";
  1284. ***************
  1285. *** 1131,1134 ****
  1286. --- 1138,1142 ----
  1287.         else
  1288.           base = "/tmp/";
  1289. + #endif
  1290.       }
  1291.       }
  1292. ***************
  1293. *** 1137,1143 ****
  1294.     temp_filename = xmalloc (len + sizeof("/ccXXXXXX"));
  1295.     strcpy (temp_filename, base);
  1296. !   if (len > 0 && temp_filename[len-1] != '/')
  1297. !     temp_filename[len++] = '/';
  1298. !   strcpy (temp_filename + len, "ccXXXXXX");
  1299.   
  1300.     mktemp (temp_filename);
  1301. --- 1145,1153 ----
  1302.     temp_filename = xmalloc (len + sizeof("/ccXXXXXX"));
  1303.     strcpy (temp_filename, base);
  1304. !   if (len > 0 && temp_filename[len-1] != '/'
  1305. ! #ifdef amigados
  1306. !                         && temp_filename[len-1] != ':'
  1307. ! #endif
  1308. !                                     )
  1309.   
  1310.     mktemp (temp_filename);
  1311. ***************
  1312. *** 1211,1214 ****
  1313. --- 1221,1225 ----
  1314.     int first_time = TRUE;
  1315.     struct prefix_list *pprefix;
  1316. +   char path_sep[] = { PATH_SEPARATOR, 0 };
  1317.   
  1318.     obstack_grow (&collect_obstack, env_var, strlen (env_var));
  1319. ***************
  1320. *** 1221,1225 ****
  1321.       {
  1322.         if (!first_time)
  1323. !         obstack_grow (&collect_obstack, ":", 1);
  1324.           
  1325.         first_time = FALSE;
  1326. --- 1232,1236 ----
  1327.       {
  1328.         if (!first_time)
  1329. !         obstack_grow (&collect_obstack, path_sep, 1);
  1330.           
  1331.         first_time = FALSE;
  1332. ***************
  1333. *** 1231,1235 ****
  1334.       {
  1335.         if (!first_time)
  1336. !         obstack_grow (&collect_obstack, ":", 1);
  1337.           
  1338.         first_time = FALSE;
  1339. --- 1242,1246 ----
  1340.       {
  1341.         if (!first_time)
  1342. !         obstack_grow (&collect_obstack, path_sep, 1);
  1343.           
  1344.         first_time = FALSE;
  1345. ***************
  1346. *** 1241,1245 ****
  1347.       {
  1348.         if (!first_time)
  1349. !         obstack_grow (&collect_obstack, ":", 1);
  1350.   
  1351.         first_time = FALSE;
  1352. --- 1252,1256 ----
  1353.       {
  1354.         if (!first_time)
  1355. !         obstack_grow (&collect_obstack, path_sep, 1);
  1356.   
  1357.         first_time = FALSE;
  1358. ***************
  1359. *** 1274,1278 ****
  1360.     /* Determine the filename to execute (special case for absolute paths).  */
  1361.   
  1362. !   if (*name == '/')
  1363.       {
  1364.         if (access (name, mode))
  1365. --- 1285,1293 ----
  1366.     /* Determine the filename to execute (special case for absolute paths).  */
  1367.   
  1368. !   if (*name == '/'
  1369. ! #ifdef amigados
  1370. !           || index (name, ':')
  1371. ! #endif
  1372. !                     )
  1373.       {
  1374.         if (access (name, mode))
  1375. ***************
  1376. *** 1480,1483 ****
  1377. --- 1495,1499 ----
  1378.      (i.e. its output should be piped to the next one.)  */
  1379.   
  1380. + #ifndef PEXECUTE
  1381.   #ifndef OS2
  1382.   #ifdef __MSDOS__
  1383. ***************
  1384. *** 1626,1629 ****
  1385. --- 1642,1646 ----
  1386.   }
  1387.   #endif /* not OS2 */
  1388. + #endif /* !defined (PEXECUTE) */
  1389.   
  1390.   /* Execute the command specified by the arguments on the current line of spec.
  1391. ***************
  1392. *** 1720,1726 ****
  1393. --- 1737,1749 ----
  1394.         char *string = commands[i].argv[0];
  1395.   
  1396. + #ifdef PEXECUTE
  1397. +       commands[i].pid = PEXECUTE (string != commands[i].prog,
  1398. +                   string, commands[i].argv,
  1399. +                   i + 1 < n_commands);
  1400. + #else
  1401.         commands[i].pid = pexecute (string != commands[i].prog,
  1402.                     string, commands[i].argv,
  1403.                     i + 1 < n_commands);
  1404. + #endif
  1405.   
  1406.         if (string != commands[i].prog)
  1407. ***************
  1408. *** 1743,1746 ****
  1409. --- 1766,1772 ----
  1410.       char *prog;
  1411.   
  1412. + #ifdef PEXECUTE_RESULT
  1413. +     pid = PEXECUTE_RESULT (status, commands[i]);
  1414. + #else /* PEXECUTE_RESULT */
  1415.   #ifdef __MSDOS__
  1416.           status = pid = commands[i].pid;
  1417. ***************
  1418. *** 1748,1751 ****
  1419. --- 1774,1778 ----
  1420.       pid = wait (&status);
  1421.   #endif
  1422. + #endif /* PEXECUTE_RESULT */
  1423.       if (pid < 0)
  1424.         abort ();
  1425. ***************
  1426. *** 1854,1857 ****
  1427. --- 1881,1885 ----
  1428.           {
  1429.             strncpy (nstore, startp, endp-startp);
  1430. + #ifndef amigados
  1431.             if (endp == startp)
  1432.           {
  1433. ***************
  1434. *** 1865,1868 ****
  1435. --- 1893,1905 ----
  1436.             else
  1437.           nstore[endp-startp] = 0;
  1438. + #else
  1439. +           if (endp[-1] != '/' && endp[-1] != ':')
  1440. +         {
  1441. +           nstore[endp-startp] = '/';
  1442. +           nstore[endp-startp+1] = 0;
  1443. +         }
  1444. +           else
  1445. +         nstore[endp-startp] = 0;
  1446. + #endif
  1447.             add_prefix (&exec_prefix, nstore, 0, 0, NULL_PTR);
  1448.             if (*endp == 0)
  1449. ***************
  1450. *** 1887,1890 ****
  1451. --- 1924,1928 ----
  1452.           {
  1453.             strncpy (nstore, startp, endp-startp);
  1454. + #ifndef amigados
  1455.             if (endp == startp)
  1456.           {
  1457. ***************
  1458. *** 1898,1901 ****
  1459. --- 1936,1948 ----
  1460.             else
  1461.           nstore[endp-startp] = 0;
  1462. + #else
  1463. +           if (endp[-1] != '/' && endp[-1] != ':')
  1464. +         {
  1465. +           nstore[endp-startp] = '/';
  1466. +           nstore[endp-startp+1] = 0;
  1467. +         }
  1468. +           else
  1469. +         nstore[endp-startp] = 0;
  1470. + #endif
  1471.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  1472.             /* Make separate list of dirs that came from LIBRARY_PATH.  */
  1473. ***************
  1474. *** 1923,1926 ****
  1475. --- 1970,1974 ----
  1476.           {
  1477.             strncpy (nstore, startp, endp-startp);
  1478. + #ifndef amigados
  1479.             if (endp == startp)
  1480.           {
  1481. ***************
  1482. *** 1934,1937 ****
  1483. --- 1982,1994 ----
  1484.             else
  1485.           nstore[endp-startp] = 0;
  1486. + #else
  1487. +           if (endp[-1] != '/' && endp[-1] != ':')
  1488. +         {
  1489. +           nstore[endp-startp] = '/';
  1490. +           nstore[endp-startp+1] = 0;
  1491. +         }
  1492. +           else
  1493. +         nstore[endp-startp] = 0;
  1494. + #endif
  1495.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  1496.             /* Make separate list of dirs that came from LIBRARY_PATH.  */
  1497. ***************
  1498. *** 3434,3437 ****
  1499. --- 3491,3497 ----
  1500.         int len;
  1501.   
  1502. + #ifdef FILE_NAME_NONDIRECTORY
  1503. +       input_basename = FILE_NAME_NONDIRECTORY (input_filename);
  1504. + #else
  1505.         input_basename = input_filename;
  1506.         for (p = input_filename; *p; p++)
  1507. ***************
  1508. *** 3438,3441 ****
  1509. --- 3498,3502 ----
  1510.           if (*p == '/')
  1511.             input_basename = p + 1;
  1512. + #endif
  1513.   
  1514.         /* Find a suffix starting with the last period,
  1515. ***************
  1516. *** 3676,3680 ****
  1517.   
  1518.     if (errno < sys_nerr)
  1519. !     s = concat ("%s: ", sys_errlist[errno], "");
  1520.     else
  1521.       s = "cannot open %s";
  1522. --- 3737,3741 ----
  1523.   
  1524.     if (errno < sys_nerr)
  1525. !     s = concat ("%s: ", strerror (errno), "");
  1526.     else
  1527.       s = "cannot open %s";
  1528. ***************
  1529. *** 3689,3693 ****
  1530.   
  1531.     if (errno < sys_nerr)
  1532. !     s = concat ("%s: ", sys_errlist[errno], "");
  1533.     else
  1534.       s = "cannot open %s";
  1535. --- 3750,3754 ----
  1536.   
  1537.     if (errno < sys_nerr)
  1538. !     s = concat ("%s: ", strerror (errno), "");
  1539.     else
  1540.       s = "cannot open %s";
  1541. ***************
  1542. *** 3703,3707 ****
  1543.     if (errno < sys_nerr)
  1544.       s = concat ("installation problem, cannot exec %s: ",
  1545. !         sys_errlist[errno], "");
  1546.     else
  1547.       s = "installation problem, cannot exec %s";
  1548. --- 3764,3768 ----
  1549.     if (errno < sys_nerr)
  1550.       s = concat ("installation problem, cannot exec %s: ",
  1551. !         strerror (errno), "");
  1552.     else
  1553.       s = "installation problem, cannot exec %s";
  1554. diff -r2cN gcc-2.3.3/genconfig.c my-gcc-2.3.3/genconfig.c
  1555. *** gcc-2.3.3/genconfig.c    Tue Oct 13 04:11:48 1992
  1556. --- my-gcc-2.3.3/genconfig.c    Sat Nov 28 22:30:40 1992
  1557. ***************
  1558. *** 304,309 ****
  1559. --- 304,317 ----
  1560.   from the machine description file `md'.  */\n\n");
  1561.   
  1562. + #ifdef amigados
  1563. +   /* this constant probably better be 14 in general, or a cross compiling
  1564. +      host might choke on some amigados header files... */
  1565. +   /* Allow at least 14 operands for the sake of asm constructs.  */
  1566. +   max_recog_operands = 14;
  1567. + #else
  1568.     /* Allow at least 10 operands for the sake of asm constructs.  */
  1569.     max_recog_operands = 9;  /* We will add 1 later.  */
  1570. + #endif
  1571.     max_dup_operands = 1;
  1572.   
  1573. diff -r2cN gcc-2.3.3/gstdarg.h my-gcc-2.3.3/gstdarg.h
  1574. *** gcc-2.3.3/gstdarg.h    Sat Nov 28 22:09:30 1992
  1575. --- my-gcc-2.3.3/gstdarg.h    Sun Nov 29 19:23:11 1992
  1576. ***************
  1577. *** 1,141 ****
  1578. - /* stdarg.h for GNU.
  1579. -    Note that the type used in va_arg is supposed to match the
  1580. -    actual type **after default promotions**.
  1581. -    Thus, va_arg (..., short) is not valid.  */
  1582. - #ifndef _STDARG_H
  1583. - #ifndef _ANSI_STDARG_H_
  1584. - #ifndef __need___va_list
  1585. - #define _STDARG_H
  1586. - #define _ANSI_STDARG_H_
  1587. - #endif /* not __need___va_list */
  1588. - #undef __need___va_list
  1589. - #ifndef __GNUC__
  1590. - /* Use the system's macros with the system's compiler.
  1591. -    This is relevant only when building GCC with some other compiler.  */
  1592.   #include <stdarg.h>
  1593. - #else
  1594. - #ifdef __m88k__
  1595. - #include <va-m88k.h>
  1596. - #else
  1597. - #ifdef __i860__
  1598. - #include <va-i860.h>
  1599. - #else
  1600. - #ifdef __hppa__
  1601. - #include <va-pa.h>
  1602. - #else
  1603. - #ifdef __mips__
  1604. - #include <va-mips.h>
  1605. - #else
  1606. - #ifdef __sparc__
  1607. - #include <va-sparc.h>
  1608. - #else
  1609. - #ifdef __i960__
  1610. - #include <va-i960.h>
  1611. - #else
  1612. - #ifdef __alpha__
  1613. - #include <va-alpha.h>
  1614. - #else
  1615. - /* Define __gnuc_va_list.  */
  1616. - #ifndef __GNUC_VA_LIST
  1617. - #define __GNUC_VA_LIST
  1618. - #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX)
  1619. - typedef char *__gnuc_va_list;
  1620. - #else
  1621. - typedef void *__gnuc_va_list;
  1622. - #endif
  1623. - #endif
  1624. - /* Define the standard macros for the user,
  1625. -    if this invocation was from the user program.  */
  1626. - #ifdef _STDARG_H
  1627. - /* Amount of space required in an argument list for an arg of type TYPE.
  1628. -    TYPE may alternatively be an expression whose type is used.  */
  1629. - #define __va_rounded_size(TYPE)  \
  1630. -   (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
  1631. - #define va_start(AP, LASTARG)                         \
  1632. -  (AP = ((__gnuc_va_list) __builtin_next_arg ()))
  1633. - #undef va_end
  1634. - void va_end (__gnuc_va_list);        /* Defined in libgcc.a */
  1635. - #define va_end(AP)
  1636. - /* We cast to void * and then to TYPE * because this avoids
  1637. -    a warning about increasing the alignment requirement.  */
  1638. - #if defined (__arm__) || defined (__i386__) || defined (__ns32000__) || defined (__vax__)
  1639. - /* This is for little-endian machines; small args are padded upward.  */
  1640. - #define va_arg(AP, TYPE)                        \
  1641. -  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
  1642. -   *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE))))
  1643. - #else /* big-endian */
  1644. - /* This is for big-endian machines; small args are padded downward.  */
  1645. - #define va_arg(AP, TYPE)                        \
  1646. -  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
  1647. -   *((TYPE *) (void *) ((char *) (AP) - ((sizeof (TYPE) < 4        \
  1648. -                      ? sizeof (TYPE)        \
  1649. -                      : __va_rounded_size (TYPE))))))
  1650. - #endif /* big-endian */
  1651. - #endif /* _STDARG_H */
  1652. - #endif /* not alpha */
  1653. - #endif /* not i960 */
  1654. - #endif /* not sparc */
  1655. - #endif /* not mips */
  1656. - #endif /* not hppa */
  1657. - #endif /* not i860 */
  1658. - #endif /* not m88k */
  1659. - #ifdef _STDARG_H
  1660. - /* Define va_list, if desired, from __gnuc_va_list. */
  1661. - /* We deliberately do not define va_list when called from
  1662. -    stdio.h, because ANSI C says that stdio.h is not supposed to define
  1663. -    va_list.  stdio.h needs to have access to that data type, 
  1664. -    but must not use that name.  It should use the name __gnuc_va_list,
  1665. -    which is safe because it is reserved for the implementation.  */
  1666. - #ifdef _HIDDEN_VA_LIST  /* On OSF1, this means varargs.h is "half-loaded".  */
  1667. - #undef _VA_LIST
  1668. - #endif
  1669. - #ifdef _BSD_VA_LIST
  1670. - #undef _BSD_VA_LIST
  1671. - #endif
  1672. - #ifdef __SVR4_2__
  1673. - /* SVR4.2 uses _VA_LIST for an internal alias for va_list,
  1674. -    so we must avoid testing it and setting it here.  */
  1675. - #ifndef _VA_LIST_
  1676. - #define _VA_LIST_
  1677. - typedef __gnuc_va_list va_list;
  1678. - #endif /* _VA_LIST_ */
  1679. - #else /* not __SVR4_2__ */
  1680. - /* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
  1681. -    But on BSD NET2 we must not test or define or undef it.
  1682. -    (Note that the comments in NET 2's ansi.h
  1683. -    are incorrect for _VA_LIST_--see stdio.h!)  */
  1684. - #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____)
  1685. - /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  1686. - #ifndef _VA_LIST
  1687. - #if !(defined (__BSD_NET2__) || defined (____386BSD____))
  1688. - #define _VA_LIST_
  1689. - #endif
  1690. - #define _VA_LIST
  1691. - typedef __gnuc_va_list va_list;
  1692. - #endif /* not _VA_LIST */
  1693. - #endif /* not _VA_LIST_ */
  1694. - #endif /* not __SVR4_2__ */
  1695. - #endif /* _STDARG_H */
  1696. - #endif /* __GNUC__ */
  1697. - #endif /* not _ANSI_STDARG_H_ */
  1698. - #endif /* not _STDARG_H */
  1699. --- 1 ----
  1700. diff -r2cN gcc-2.3.3/gstddef.h my-gcc-2.3.3/gstddef.h
  1701. *** gcc-2.3.3/gstddef.h    Sat Nov 28 22:09:32 1992
  1702. --- my-gcc-2.3.3/gstddef.h    Sat Nov 28 22:30:42 1992
  1703. ***************
  1704. *** 3,6 ****
  1705. --- 3,20 ----
  1706.   #ifndef _ANSI_STDDEF_H
  1707.   
  1708. + #ifdef amigados
  1709. + /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
  1710. +    just as well. The system headers are ANSI compliant, the used compiler IS
  1711. +    gcc, so it's really ok to use the system header, no reason to hassle
  1712. +    with a jungle of ifdefs. Besides, amigados is only defined if compiling
  1713. +    with host=amigados, it doesn't apply if compiling with target=amigados
  1714. +    on a different host with possibly different system headers. Same thing
  1715. +    would apply to gstdarg.h and gvarargs.h, but those headers are more
  1716. +    easily fixable than this one and I'm sick of writing the same comment
  1717. +    there as well. MW */
  1718. + #include <stddef.h>
  1719. + #else /* not amigados */
  1720.   /* Any one of these symbols __need_* means that GNU libc
  1721.      wants us just to define one data type.  So don't define
  1722. ***************
  1723. *** 147,150 ****
  1724. --- 161,166 ----
  1725.   #define __WCHAR_TYPE__ int
  1726.   #endif
  1727. + #endif /* not amigados */
  1728.   #ifdef __GNUG__
  1729.   /* In C++, wchar_t is a distinct basic type,
  1730. diff -r2cN gcc-2.3.3/gvarargs.h my-gcc-2.3.3/gvarargs.h
  1731. *** gcc-2.3.3/gvarargs.h    Sat Nov 28 22:09:36 1992
  1732. --- my-gcc-2.3.3/gvarargs.h    Sat Nov 28 23:57:06 1992
  1733. ***************
  1734. *** 1,155 ****
  1735. - #ifndef __GNUC__
  1736. - /* Use the system's macros with the system's compiler.  */
  1737.   #include <varargs.h>
  1738. - #else
  1739. - /* Record that this is varargs.h; this turns off stdarg.h.  */
  1740. - #ifndef _VARARGS_H
  1741. - #define _VARARGS_H
  1742. - #ifdef __sparc__
  1743. - #include <va-sparc.h>
  1744. - #else
  1745. - #ifdef __spur__
  1746. - #include <va-spur.h>
  1747. - #else
  1748. - #ifdef __mips__
  1749. - #include <va-mips.h>
  1750. - #else
  1751. - #ifdef __i860__
  1752. - #include <va-i860.h>
  1753. - #else
  1754. - #ifdef __pyr__
  1755. - #include <va-pyr.h>
  1756. - #else
  1757. - #ifdef __m88k__
  1758. - #include <va-m88k.h>
  1759. - #else
  1760. - #if defined(__hppa__) || defined(hp800)
  1761. - #include <va-pa.h>
  1762. - #else
  1763. - #ifdef __i960__
  1764. - #include <va-i960.h>
  1765. - #else
  1766. - #ifdef __alpha__
  1767. - #include <va-alpha.h>
  1768. - #else
  1769. - #ifdef __NeXT__
  1770. - /* On Next, erase any vestiges of stdarg.h.  */
  1771. - #ifdef _ANSI_STDARG_H_
  1772. - #define _VA_LIST_
  1773. - #endif
  1774. - #define _ANSI_STDARG_H_ 
  1775. - #undef va_alist
  1776. - #undef va_dcl
  1777. - #undef va_list
  1778. - #undef va_start
  1779. - #undef va_end
  1780. - #undef __va_rounded_size
  1781. - #undef va_arg
  1782. - #endif  /* __NeXT__ */
  1783. - /* In GCC version 2, we want an ellipsis at the end of the declaration
  1784. -    of the argument list.  GCC version 1 can't parse it.  */
  1785. - #if __GNUC__ > 1
  1786. - #define __va_ellipsis ...
  1787. - #else
  1788. - #define __va_ellipsis
  1789. - #endif
  1790. - /* These macros implement traditional (non-ANSI) varargs
  1791. -    for GNU C.  */
  1792. - #define va_alist  __builtin_va_alist
  1793. - /* The ... causes current_function_varargs to be set in cc1.  */
  1794. - #define va_dcl    int __builtin_va_alist; __va_ellipsis
  1795. - /* Define __gnuc_va_list, just as in gstdarg.h.  */
  1796. - #ifndef __GNUC_VA_LIST
  1797. - #define __GNUC_VA_LIST
  1798. - #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX)
  1799. - typedef char *__gnuc_va_list;
  1800. - #else
  1801. - typedef void *__gnuc_va_list;
  1802. - #endif
  1803. - #endif
  1804. - #define va_start(AP)  AP=(char *) &__builtin_va_alist
  1805. - #define va_end(AP)
  1806. - #define __va_rounded_size(TYPE)  \
  1807. -   (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
  1808. - #if defined (__arm__) || defined (__i386__) || defined (__ns32000__) || defined (__vax__)
  1809. - /* This is for little-endian machines; small args are padded upward.  */
  1810. - #define va_arg(AP, TYPE)                        \
  1811. -  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
  1812. -   *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE))))
  1813. - #else /* big-endian */
  1814. - /* This is for big-endian machines; small args are padded downward.  */
  1815. - #define va_arg(AP, TYPE)                        \
  1816. -  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
  1817. -   *((TYPE *) (void *) ((char *) (AP) - ((sizeof (TYPE) < 4        \
  1818. -                      ? sizeof (TYPE)        \
  1819. -                      : __va_rounded_size (TYPE))))))
  1820. - #endif /* big-endian */
  1821. - #endif /* not alpha */
  1822. - #endif /* not i960 */
  1823. - #endif /* not hppa */
  1824. - #endif /* not m88k */
  1825. - #endif /* not pyr */
  1826. - #endif /* not i860 */
  1827. - #endif /* not mips */
  1828. - #endif /* not spur */
  1829. - #endif /* not sparc */
  1830. - #endif /* not _VARARGS_H */
  1831. - /* Define va_list from __gnuc_va_list.  */
  1832. - #ifdef _HIDDEN_VA_LIST  /* On OSF1, this means varargs.h is "half-loaded".  */
  1833. - #undef _VA_LIST
  1834. - #endif
  1835. - #ifdef __SVR4_2__
  1836. - /* SVR4.2 uses _VA_LIST for an internal alias for va_list,
  1837. -    so we must avoid testing it and setting it here.  */
  1838. - #ifndef _VA_LIST_
  1839. - #define _VA_LIST_
  1840. - typedef __gnuc_va_list va_list;
  1841. - #endif /* _VA_LIST_ */
  1842. - #else /* not __SVR4_2__ */
  1843. - /* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
  1844. -    But on BSD NET2 we must not test or define or undef it.
  1845. -    (Note that the comments in NET 2's ansi.h
  1846. -    are incorrect for _VA_LIST_--see stdio.h!)  */
  1847. - #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____)
  1848. - /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  1849. - #ifndef _VA_LIST
  1850. - #if !(defined (__BSD_NET2__) || defined (____386BSD____))
  1851. - #define _VA_LIST_
  1852. - #endif
  1853. - #define _VA_LIST
  1854. - typedef __gnuc_va_list va_list;
  1855. - #endif /* not _VA_LIST */
  1856. - #endif /* not _VA_LIST_ */
  1857. - #endif /* not __SVR4_2__ */
  1858. - /* The next BSD release (if there is one) wants this symbol to be
  1859. -    undefined instead of _VA_LIST_.  */
  1860. - #ifdef _BSD_VA_LIST
  1861. - #undef _BSD_VA_LIST
  1862. - #endif
  1863. - #endif /* __GNUC__ */
  1864. --- 1 ----
  1865. diff -r2cN gcc-2.3.3/machmode.h my-gcc-2.3.3/machmode.h
  1866. *** gcc-2.3.3/machmode.h    Sun Aug  2 02:59:22 1992
  1867. --- my-gcc-2.3.3/machmode.h    Sat Nov 28 22:30:46 1992
  1868. ***************
  1869. *** 84,88 ****
  1870.   /* Get the name of mode MODE as a string.  */
  1871.   
  1872. ! extern char *mode_name[];
  1873.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  1874.   
  1875. --- 84,88 ----
  1876.   /* Get the name of mode MODE as a string.  */
  1877.   
  1878. ! extern char * const mode_name[];
  1879.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  1880.   
  1881. ***************
  1882. *** 93,97 ****
  1883.      (integer, floating, complex, etc.)  */
  1884.   
  1885. ! extern enum mode_class mode_class[];
  1886.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  1887.   
  1888. --- 93,97 ----
  1889.      (integer, floating, complex, etc.)  */
  1890.   
  1891. ! extern const enum mode_class mode_class[];
  1892.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  1893.   
  1894. ***************
  1895. *** 98,102 ****
  1896.   /* Get the size in bytes of an object of mode MODE.  */
  1897.   
  1898. ! extern int mode_size[];
  1899.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  1900.   
  1901. --- 98,102 ----
  1902.   /* Get the size in bytes of an object of mode MODE.  */
  1903.   
  1904. ! extern const int mode_size[];
  1905.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  1906.   
  1907. ***************
  1908. *** 103,107 ****
  1909.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  1910.   
  1911. ! extern int mode_unit_size[];
  1912.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  1913.   
  1914. --- 103,107 ----
  1915.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  1916.   
  1917. ! extern const int mode_unit_size[];
  1918.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  1919.   
  1920. ***************
  1921. *** 125,129 ****
  1922.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  1923.   
  1924. ! extern enum machine_mode mode_wider_mode[];
  1925.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  1926.   
  1927. --- 125,129 ----
  1928.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  1929.   
  1930. ! extern const enum machine_mode mode_wider_mode[];
  1931.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  1932.   
  1933. diff -r2cN gcc-2.3.3/print-tree.c my-gcc-2.3.3/print-tree.c
  1934. *** gcc-2.3.3/print-tree.c    Sat Oct 24 00:09:26 1992
  1935. --- my-gcc-2.3.3/print-tree.c    Sat Nov 28 22:30:48 1992
  1936. ***************
  1937. *** 25,29 ****
  1938.   extern char **tree_code_name;
  1939.   
  1940. ! extern char *mode_name[];
  1941.   
  1942.   void print_node ();
  1943. --- 25,29 ----
  1944.   extern char **tree_code_name;
  1945.   
  1946. ! extern char *const mode_name[];
  1947.   
  1948.   void print_node ();
  1949. diff -r2cN gcc-2.3.3/protoize.c my-gcc-2.3.3/protoize.c
  1950. *** gcc-2.3.3/protoize.c    Sat Oct 17 20:50:54 1992
  1951. --- my-gcc-2.3.3/protoize.c    Sun Nov 29 20:16:59 1992
  1952. ***************
  1953. *** 79,83 ****
  1954. --- 79,86 ----
  1955.   
  1956.   extern int errno;
  1957. + #ifndef HAVE_STRERROR
  1958.   extern char *sys_errlist[];
  1959. + #define strerror(err) sys_errlist[err]
  1960. + #endif
  1961.   extern char *version_string;
  1962.   
  1963. ***************
  1964. *** 777,782 ****
  1965. --- 780,790 ----
  1966.     struct default_include *p;
  1967.   
  1968. + #ifdef FILE_NAME_ABSOLUTE_P
  1969. +   if (! FILE_NAME_ABSOLUTE_P (path))
  1970. +     abort ();
  1971. + #else
  1972.     if (path[0] != '/')
  1973.       abort ();        /* Must be an absolutized filename.  */
  1974. + #endif
  1975.   
  1976.     for (p = include_defaults; p->fname; p++)
  1977. ***************
  1978. *** 1205,1209 ****
  1979. --- 1213,1221 ----
  1980.       const char *src_p;
  1981.   
  1982. + #ifdef FILE_NAME_ABSOLUTE_P
  1983. +     if (! FILE_NAME_ABSOLUTE_P (rel_filename))
  1984. + #else
  1985.       if (rel_filename[0] != '/')
  1986. + #endif
  1987.         {
  1988.           src_p = cwd2;
  1989. ***************
  1990. *** 1407,1411 ****
  1991.               {
  1992.                 fprintf (stderr, "%s: %s: can't get status: %s\n",
  1993. !                pname, shortpath (NULL, filename), sys_errlist[errno]);
  1994.                 stat_buf.st_mtime = (time_t) -1;
  1995.               }
  1996. --- 1419,1423 ----
  1997.               {
  1998.                 fprintf (stderr, "%s: %s: can't get status: %s\n",
  1999. !                pname, shortpath (NULL, filename), strerror (errno));
  2000.                 stat_buf.st_mtime = (time_t) -1;
  2001.               }
  2002. ***************
  2003. *** 1468,1471 ****
  2004. --- 1480,1502 ----
  2005.   }
  2006.   
  2007. + /* Use this macro to advance a char * over the filename part in a line
  2008. +    read from an aux-info file. */
  2009. + #ifndef amigados
  2010. + /* Version for file systems where the colon has no special meaning */
  2011. + #define ADVANCE_PAST_FILENAME(CP) \
  2012. +   while (* (CP) != ':') (CP)++
  2013. + #else
  2014. + /* Have to heuristically decide whether the colon is part of the filename
  2015. +    or whether it serves to delimit the filename from the line number. If
  2016. +    it's the latter case, then the character following the colon *must*
  2017. +    be a digit. Note that this heuristic fails if the filename starts
  2018. +    with a digit. */
  2019. + #define ADVANCE_PAST_FILENAME(CP) \
  2020. +     while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
  2021. +       (CP)++;
  2022. + #endif
  2023.   /* Given a line from  an aux info file, and a time at which the aux info
  2024.      file it came from was created, check to see if the item described in
  2025. ***************
  2026. *** 1489,1494 ****
  2027.       const char *filename_start = p = l + 3;
  2028.   
  2029. !     while (*p != ':')
  2030. !       p++;
  2031.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  2032.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  2033. --- 1520,1524 ----
  2034.       const char *filename_start = p = l + 3;
  2035.   
  2036. !     ADVANCE_PAST_FILENAME (p);
  2037.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  2038.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  2039. ***************
  2040. *** 1547,1552 ****
  2041.       char *filename;
  2042.   
  2043. !     while (*p != ':')
  2044. !       p++;
  2045.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  2046.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  2047. --- 1577,1581 ----
  2048.       char *filename;
  2049.   
  2050. !     ADVANCE_PAST_FILENAME (p);
  2051.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  2052.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  2053. ***************
  2054. *** 2001,2005 ****
  2055.           {
  2056.             fprintf (stderr, "%s: could not fork process: %s\n",
  2057. !            pname, sys_errlist[errno]);
  2058.             return 0;
  2059.           }
  2060. --- 2030,2034 ----
  2061.           {
  2062.             fprintf (stderr, "%s: could not fork process: %s\n",
  2063. !            pname, strerror (errno));
  2064.             return 0;
  2065.           }
  2066. ***************
  2067. *** 2029,2033 ****
  2068.             {
  2069.               fprintf (stderr, "%s: wait failed: %s\n",
  2070. !              pname, sys_errlist[errno]);
  2071.               return 0;
  2072.             }
  2073. --- 2058,2062 ----
  2074.             {
  2075.               fprintf (stderr, "%s: wait failed: %s\n",
  2076. !              pname, strerror (errno));
  2077.               return 0;
  2078.             }
  2079. ***************
  2080. *** 2056,2060 ****
  2081.         write (f, compile_params[0], strlen (compile_params[0]));
  2082.         write (f, ": ", 2);
  2083. !       write (f, sys_errlist[e], strlen (sys_errlist[e]));
  2084.         write (f, "\n", 1);
  2085.             _exit (1);
  2086. --- 2085,2089 ----
  2087.         write (f, compile_params[0], strlen (compile_params[0]));
  2088.         write (f, ": ", 2);
  2089. !       write (f, strerror (e), strlen (strerror (e)));
  2090.         write (f, "\n", 1);
  2091.             _exit (1);
  2092. ***************
  2093. *** 2116,2120 ****
  2094.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  2095.              pname, shortpath (NULL, aux_info_filename),
  2096. !            sys_errlist[errno]);
  2097.         errors++;
  2098.         return;
  2099. --- 2145,2149 ----
  2100.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  2101.              pname, shortpath (NULL, aux_info_filename),
  2102. !            strerror (errno));
  2103.         errors++;
  2104.         return;
  2105. ***************
  2106. *** 2144,2148 ****
  2107.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  2108.              pname, shortpath (NULL, aux_info_filename),
  2109. !            sys_errlist[errno]);
  2110.         errors++;
  2111.         return;
  2112. --- 2173,2177 ----
  2113.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  2114.              pname, shortpath (NULL, aux_info_filename),
  2115. !            strerror (errno));
  2116.         errors++;
  2117.         return;
  2118. ***************
  2119. *** 2159,2163 ****
  2120.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  2121.            pname, shortpath (NULL, aux_info_filename),
  2122. !          sys_errlist[errno]);
  2123.           errors++;
  2124.           return;
  2125. --- 2188,2192 ----
  2126.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  2127.            pname, shortpath (NULL, aux_info_filename),
  2128. !          strerror (errno));
  2129.           errors++;
  2130.           return;
  2131. ***************
  2132. *** 2186,2190 ****
  2133.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  2134.                pname, shortpath (NULL, base_source_filename),
  2135. !              sys_errlist[errno]);
  2136.           errors++;
  2137.           return;
  2138. --- 2215,2219 ----
  2139.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  2140.                pname, shortpath (NULL, base_source_filename),
  2141. !              strerror (errno));
  2142.           errors++;
  2143.           return;
  2144. ***************
  2145. *** 2207,2211 ****
  2146.           fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n",
  2147.            pname, shortpath (NULL, aux_info_filename),
  2148. !          sys_errlist[errno]);
  2149.           return;
  2150.         }
  2151. --- 2236,2240 ----
  2152.           fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n",
  2153.            pname, shortpath (NULL, aux_info_filename),
  2154. !          strerror (errno));
  2155.           return;
  2156.         }
  2157. ***************
  2158. *** 2223,2227 ****
  2159.           fprintf (stderr, "%s: error reading aux info file `%s': %s\n",
  2160.            pname, shortpath (NULL, aux_info_filename),
  2161. !          sys_errlist[errno]);
  2162.           free (aux_info_base);
  2163.           close (aux_info_file);
  2164. --- 2252,2256 ----
  2165.           fprintf (stderr, "%s: error reading aux info file `%s': %s\n",
  2166.            pname, shortpath (NULL, aux_info_filename),
  2167. !          strerror (errno));
  2168.           free (aux_info_base);
  2169.           close (aux_info_file);
  2170. ***************
  2171. *** 2235,2239 ****
  2172.           fprintf (stderr, "%s: error closing aux info file `%s': %s\n",
  2173.            pname, shortpath (NULL, aux_info_filename),
  2174. !          sys_errlist[errno]);
  2175.           free (aux_info_base);
  2176.           close (aux_info_file);
  2177. --- 2264,2268 ----
  2178.           fprintf (stderr, "%s: error closing aux info file `%s': %s\n",
  2179.            pname, shortpath (NULL, aux_info_filename),
  2180. !          strerror (errno));
  2181.           free (aux_info_base);
  2182.           close (aux_info_file);
  2183. ***************
  2184. *** 2249,2253 ****
  2185.         fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
  2186.              pname, shortpath (NULL, aux_info_filename),
  2187. !            sys_errlist[errno]);
  2188.   
  2189.     /* Save a pointer into the first line of the aux_info file which
  2190. --- 2278,2282 ----
  2191.         fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
  2192.              pname, shortpath (NULL, aux_info_filename),
  2193. !            strerror (errno));
  2194.   
  2195.     /* Save a pointer into the first line of the aux_info file which
  2196. ***************
  2197. *** 2261,2265 ****
  2198.       char *p = aux_info_base;
  2199.   
  2200. !     while (*p != ':')
  2201.         p++;
  2202.       p++;
  2203. --- 2290,2296 ----
  2204.       char *p = aux_info_base;
  2205.   
  2206. !     /* have to make sure at least one space is following the colon to make
  2207. !        sure the colon is not part of the filename */
  2208. !     while (*p != ':' && p[1] != ' ')
  2209.         p++;
  2210.       p++;
  2211. ***************
  2212. *** 2275,2279 ****
  2213. --- 2306,2314 ----
  2214.       aux_info_second_line = p;
  2215.       aux_info_relocated_name = 0;
  2216. + #ifdef FILE_NAME_ABSOLUTE_P
  2217. +     if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
  2218. + #else
  2219.       if (invocation_filename[0] != '/')
  2220. + #endif
  2221.         {
  2222.       /* INVOCATION_FILENAME is relative;
  2223. ***************
  2224. *** 2315,2319 ****
  2225.                       fprintf (stderr, "%s: can't delete file `%s': %s\n",
  2226.                    pname, shortpath (NULL, aux_info_filename),
  2227. !                  sys_errlist[errno]);
  2228.                       return;
  2229.                     }
  2230. --- 2350,2354 ----
  2231.                       fprintf (stderr, "%s: can't delete file `%s': %s\n",
  2232.                    pname, shortpath (NULL, aux_info_filename),
  2233. !                  strerror (errno));
  2234.                       return;
  2235.                     }
  2236. ***************
  2237. *** 2363,2367 ****
  2238.   
  2239.   /* Check an individual filename for a .c suffix.  If the filename has this
  2240. !    suffix, rename the file such that its suffix is changed to .C.  This
  2241.      function implements the -C option.  */
  2242.   
  2243. --- 2398,2402 ----
  2244.   
  2245.   /* Check an individual filename for a .c suffix.  If the filename has this
  2246. !    suffix, rename the file such that its suffix is changed to .cc.  This
  2247.      function implements the -C option.  */
  2248.   
  2249. ***************
  2250. *** 2372,2376 ****
  2251.     const char *filename = hp->symbol;
  2252.     int last_char_index = strlen (filename) - 1;
  2253. !   char *const new_filename = (char *) alloca (strlen (filename) + 1);
  2254.   
  2255.     /* Note that we don't care here if the given file was converted or not.  It
  2256. --- 2407,2411 ----
  2257.     const char *filename = hp->symbol;
  2258.     int last_char_index = strlen (filename) - 1;
  2259. !   char *const new_filename = (char *) alloca (strlen (filename) + 2);
  2260.   
  2261.     /* Note that we don't care here if the given file was converted or not.  It
  2262. ***************
  2263. *** 2384,2389 ****
  2264.   
  2265.     strcpy (new_filename, filename);
  2266. !   new_filename[last_char_index] = 'C';
  2267.   
  2268.     if (my_link (filename, new_filename) == -1)
  2269.       {
  2270. --- 2419,2441 ----
  2271.   
  2272.     strcpy (new_filename, filename);
  2273. !   strcat (new_filename + last_char_index, "cc");
  2274.   
  2275. +   /* use rename(2) if available !! Update config files to include HAVE_rename
  2276. +      if the used OS provides it. Advantages are: it's atomic, it's one
  2277. +      system call compared to two. */
  2278. + #ifdef HAVE_rename
  2279. +   /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
  2280. +      to be changed to `my_rename' as well. */
  2281. +   if (rename (filename, new_filename) == -1)
  2282. +     {
  2283. +       fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
  2284. +            pname, shortpath (NULL, filename),
  2285. +            shortpath (NULL, new_filename), strerror (errno));
  2286. +       errors++;
  2287. +       return;
  2288. +     }
  2289. + #else
  2290.     if (my_link (filename, new_filename) == -1)
  2291.       {
  2292. ***************
  2293. *** 2390,2394 ****
  2294.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  2295.              pname, shortpath (NULL, filename),
  2296. !            shortpath (NULL, new_filename), sys_errlist[errno]);
  2297.         errors++;
  2298.         return;
  2299. --- 2442,2446 ----
  2300.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  2301.              pname, shortpath (NULL, filename),
  2302. !            shortpath (NULL, new_filename), strerror (errno));
  2303.         errors++;
  2304.         return;
  2305. ***************
  2306. *** 2398,2405 ****
  2307.       {
  2308.         fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
  2309. !            pname, shortpath (NULL, filename), sys_errlist[errno]);
  2310.         errors++;
  2311.         return;
  2312.       }
  2313.   }
  2314.   
  2315. --- 2450,2458 ----
  2316.       {
  2317.         fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
  2318. !            pname, shortpath (NULL, filename), strerror (errno));
  2319.         errors++;
  2320.         return;
  2321.       }
  2322. + #endif
  2323.   }
  2324.   
  2325. ***************
  2326. *** 4094,4098 ****
  2327.       {
  2328.         fprintf (stderr, "%s: can't get status for file `%s': %s\n",
  2329. !            pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  2330.         return;
  2331.       }
  2332. --- 4147,4151 ----
  2333.       {
  2334.         fprintf (stderr, "%s: can't get status for file `%s': %s\n",
  2335. !            pname, shortpath (NULL, convert_filename), strerror (errno));
  2336.         return;
  2337.       }
  2338. ***************
  2339. *** 4129,4133 ****
  2340.           fprintf (stderr, "%s: can't open file `%s' for reading: %s\n",
  2341.            pname, shortpath (NULL, convert_filename),
  2342. !          sys_errlist[errno]);
  2343.           return;
  2344.         }
  2345. --- 4182,4186 ----
  2346.           fprintf (stderr, "%s: can't open file `%s' for reading: %s\n",
  2347.            pname, shortpath (NULL, convert_filename),
  2348. !          strerror (errno));
  2349.           return;
  2350.         }
  2351. ***************
  2352. *** 4142,4146 ****
  2353.           fprintf (stderr, "\n%s: error reading input file `%s': %s\n",
  2354.            pname, shortpath (NULL, convert_filename),
  2355. !          sys_errlist[errno]);
  2356.           return;
  2357.         }
  2358. --- 4195,4199 ----
  2359.           fprintf (stderr, "\n%s: error reading input file `%s': %s\n",
  2360.            pname, shortpath (NULL, convert_filename),
  2361. !          strerror (errno));
  2362.           return;
  2363.         }
  2364. ***************
  2365. *** 4175,4179 ****
  2366.           fprintf (stderr, "%s: can't create/open clean file `%s': %s\n",
  2367.            pname, shortpath (NULL, clean_filename),
  2368. !          sys_errlist[errno]);
  2369.           return;
  2370.         }
  2371. --- 4228,4232 ----
  2372.           fprintf (stderr, "%s: can't create/open clean file `%s': %s\n",
  2373.            pname, shortpath (NULL, clean_filename),
  2374. !          strerror (errno));
  2375.           return;
  2376.         }
  2377. ***************
  2378. *** 4183,4187 ****
  2379.       if (write (clean_file, new_clean_text_base, clean_size) != clean_size)
  2380.         fprintf (stderr, "%s: error writing file `%s': %s\n",
  2381. !            pname, shortpath (NULL, clean_filename), sys_errlist[errno]);
  2382.     
  2383.       close (clean_file);
  2384. --- 4236,4240 ----
  2385.       if (write (clean_file, new_clean_text_base, clean_size) != clean_size)
  2386.         fprintf (stderr, "%s: error writing file `%s': %s\n",
  2387. !            pname, shortpath (NULL, clean_filename), strerror (errno));
  2388.     
  2389.       close (clean_file);
  2390. ***************
  2391. *** 4286,4290 ****
  2392.                  shortpath (NULL, convert_filename),
  2393.                  shortpath (NULL, new_filename),
  2394. !                sys_errlist[errno]);
  2395.                 return;
  2396.               }
  2397. --- 4339,4343 ----
  2398.                  shortpath (NULL, convert_filename),
  2399.                  shortpath (NULL, new_filename),
  2400. !                strerror (errno));
  2401.                 return;
  2402.               }
  2403. ***************
  2404. *** 4295,4299 ****
  2405.       {
  2406.         fprintf (stderr, "%s: can't delete file `%s': %s\n",
  2407. !            pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  2408.         return;
  2409.       }
  2410. --- 4348,4352 ----
  2411.       {
  2412.         fprintf (stderr, "%s: can't delete file `%s': %s\n",
  2413. !            pname, shortpath (NULL, convert_filename), strerror (errno));
  2414.         return;
  2415.       }
  2416. ***************
  2417. *** 4308,4312 ****
  2418.           fprintf (stderr, "%s: can't create/open output file `%s': %s\n",
  2419.            pname, shortpath (NULL, convert_filename),
  2420. !          sys_errlist[errno]);
  2421.           return;
  2422.         }
  2423. --- 4361,4365 ----
  2424.           fprintf (stderr, "%s: can't create/open output file `%s': %s\n",
  2425.            pname, shortpath (NULL, convert_filename),
  2426. !          strerror (errno));
  2427.           return;
  2428.         }
  2429. ***************
  2430. *** 4320,4324 ****
  2431.           fprintf (stderr, "%s: error writing file `%s': %s\n",
  2432.            pname, shortpath (NULL, convert_filename),
  2433. !          sys_errlist[errno]);
  2434.       }
  2435.     
  2436. --- 4373,4377 ----
  2437.           fprintf (stderr, "%s: error writing file `%s': %s\n",
  2438.            pname, shortpath (NULL, convert_filename),
  2439. !          strerror (errno));
  2440.       }
  2441.     
  2442. ***************
  2443. *** 4337,4341 ****
  2444.     if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
  2445.       fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
  2446. !          pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  2447.   
  2448.     /* Note:  We would try to change the owner and group of the output file
  2449. --- 4390,4394 ----
  2450.     if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
  2451.       fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
  2452. !          pname, shortpath (NULL, convert_filename), strerror (errno));
  2453.   
  2454.     /* Note:  We would try to change the owner and group of the output file
  2455. ***************
  2456. *** 4480,4484 ****
  2457.       {
  2458.         fprintf (stderr, "%s: cannot get working directory: %s\n",
  2459. !            pname, sys_errlist[errno]);
  2460.         exit (1);
  2461.       }
  2462. --- 4533,4537 ----
  2463.       {
  2464.         fprintf (stderr, "%s: cannot get working directory: %s\n",
  2465. !            pname, strerror (errno));
  2466.         exit (1);
  2467.       }
  2468. diff -r2cN gcc-2.3.3/rtl.c my-gcc-2.3.3/rtl.c
  2469. *** gcc-2.3.3/rtl.c    Sat Sep 19 19:33:11 1992
  2470. --- my-gcc-2.3.3/rtl.c    Sat Nov 28 22:30:57 1992
  2471. ***************
  2472. *** 50,54 ****
  2473.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  2474.   
  2475. ! char *rtx_name[] = {
  2476.   #include "rtl.def"        /* rtl expressions are documented here */
  2477.   };
  2478. --- 50,54 ----
  2479.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  2480.   
  2481. ! char * const rtx_name[] = {
  2482.   #include "rtl.def"        /* rtl expressions are documented here */
  2483.   };
  2484. ***************
  2485. *** 61,65 ****
  2486.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  2487.   
  2488. ! char *mode_name[(int) MAX_MACHINE_MODE] = {
  2489.   #include "machmode.def"
  2490.   
  2491. --- 61,65 ----
  2492.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  2493.   
  2494. ! char * const mode_name[(int) MAX_MACHINE_MODE] = {
  2495.   #include "machmode.def"
  2496.   
  2497. ***************
  2498. *** 77,81 ****
  2499.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  2500.   
  2501. ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  2502.   #include "machmode.def"
  2503.   };
  2504. --- 77,81 ----
  2505.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  2506.   
  2507. ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  2508.   #include "machmode.def"
  2509.   };
  2510. ***************
  2511. *** 88,92 ****
  2512.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  2513.   
  2514. ! int mode_size[(int) MAX_MACHINE_MODE] = {
  2515.   #include "machmode.def"
  2516.   };
  2517. --- 88,92 ----
  2518.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  2519.   
  2520. ! const int mode_size[(int) MAX_MACHINE_MODE] = {
  2521.   #include "machmode.def"
  2522.   };
  2523. ***************
  2524. *** 99,103 ****
  2525.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  2526.   
  2527. ! int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  2528.   #include "machmode.def"        /* machine modes are documented here */
  2529.   };
  2530. --- 99,103 ----
  2531.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  2532.   
  2533. ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  2534.   #include "machmode.def"        /* machine modes are documented here */
  2535.   };
  2536. ***************
  2537. *** 112,116 ****
  2538.     (enum machine_mode) WIDER,
  2539.   
  2540. ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  2541.   #include "machmode.def"        /* machine modes are documented here */
  2542.   };
  2543. --- 112,116 ----
  2544.     (enum machine_mode) WIDER,
  2545.   
  2546. ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  2547.   #include "machmode.def"        /* machine modes are documented here */
  2548.   };
  2549. ***************
  2550. *** 131,135 ****
  2551.      each character describes one operand.  */
  2552.   
  2553. ! char *rtx_format[] = {
  2554.     /* "*" undefined.
  2555.            can cause a warning message
  2556. --- 131,135 ----
  2557.      each character describes one operand.  */
  2558.   
  2559. ! char *const rtx_format[] = {
  2560.     /* "*" undefined.
  2561.            can cause a warning message
  2562. ***************
  2563. *** 162,166 ****
  2564.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  2565.   
  2566. ! char rtx_class[] = {
  2567.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  2568.   #include "rtl.def"        /* rtl expressions are defined here */
  2569. --- 162,166 ----
  2570.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  2571.   
  2572. ! const char rtx_class[] = {
  2573.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  2574.   #include "rtl.def"        /* rtl expressions are defined here */
  2575. ***************
  2576. *** 170,174 ****
  2577.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  2578.   
  2579. ! char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED",
  2580.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  2581.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  2582. --- 170,175 ----
  2583.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  2584.   
  2585. ! char * const note_insn_name[] = 
  2586. !              { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED",
  2587.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  2588.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  2589. ***************
  2590. *** 178,182 ****
  2591.                  "NOTE_INSN_DELETED_LABEL"};
  2592.   
  2593. ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  2594.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  2595.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  2596. --- 179,184 ----
  2597.                  "NOTE_INSN_DELETED_LABEL"};
  2598.   
  2599. ! char * const reg_note_name[] = 
  2600. !             { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  2601.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  2602.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  2603. diff -r2cN gcc-2.3.3/rtl.h my-gcc-2.3.3/rtl.h
  2604. *** gcc-2.3.3/rtl.h    Wed Dec 30 00:13:33 1992
  2605. --- my-gcc-2.3.3/rtl.h    Mon Dec 28 14:03:44 1992
  2606. ***************
  2607. *** 43,53 ****
  2608.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  2609.   
  2610. ! extern char *rtx_name[];
  2611.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  2612.   
  2613. ! extern char *rtx_format[];
  2614.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  2615.   
  2616. ! extern char rtx_class[];
  2617.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  2618.   
  2619. --- 43,53 ----
  2620.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  2621.   
  2622. ! extern char * const rtx_name[];
  2623.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  2624.   
  2625. ! extern char * const rtx_format[];
  2626.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  2627.   
  2628. ! extern const char rtx_class[];
  2629.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  2630.   
  2631. ***************
  2632. *** 329,333 ****
  2633.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  2634.   
  2635. ! extern char *reg_note_name[];
  2636.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  2637.   
  2638. --- 329,333 ----
  2639.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  2640.   
  2641. ! extern char *const reg_note_name[];
  2642.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  2643.   
  2644. ***************
  2645. *** 397,401 ****
  2646.   /* Names for NOTE insn's other than line numbers.  */
  2647.   
  2648. ! extern char *note_insn_name[];
  2649.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  2650.   
  2651. --- 397,401 ----
  2652.   /* Names for NOTE insn's other than line numbers.  */
  2653.   
  2654. ! extern char *const note_insn_name[];
  2655.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  2656.   
  2657. Binary files gcc-2.3.3/stage1/cc1 and my-gcc-2.3.3/stage1/cc1 differ
  2658. Binary files gcc-2.3.3/stage1/cc1obj and my-gcc-2.3.3/stage1/cc1obj differ
  2659. Binary files gcc-2.3.3/stage1/cc1plus and my-gcc-2.3.3/stage1/cc1plus differ
  2660. Binary files gcc-2.3.3/stage1/cccp and my-gcc-2.3.3/stage1/cccp differ
  2661. Binary files gcc-2.3.3/stage1/cpp and my-gcc-2.3.3/stage1/cpp differ
  2662. Binary files gcc-2.3.3/stage1/enquire and my-gcc-2.3.3/stage1/enquire differ
  2663. Binary files gcc-2.3.3/stage1/gccs and my-gcc-2.3.3/stage1/gccs differ
  2664. Binary files gcc-2.3.3/stage1/genattr and my-gcc-2.3.3/stage1/genattr differ
  2665. Binary files gcc-2.3.3/stage1/genattrtab and my-gcc-2.3.3/stage1/genattrtab differ
  2666. Binary files gcc-2.3.3/stage1/gencodes and my-gcc-2.3.3/stage1/gencodes differ
  2667. Binary files gcc-2.3.3/stage1/genconfig and my-gcc-2.3.3/stage1/genconfig differ
  2668. Binary files gcc-2.3.3/stage1/genemit and my-gcc-2.3.3/stage1/genemit differ
  2669. Binary files gcc-2.3.3/stage1/genextract and my-gcc-2.3.3/stage1/genextract differ
  2670. Binary files gcc-2.3.3/stage1/genflags and my-gcc-2.3.3/stage1/genflags differ
  2671. Binary files gcc-2.3.3/stage1/genoutput and my-gcc-2.3.3/stage1/genoutput differ
  2672. Binary files gcc-2.3.3/stage1/genpeep and my-gcc-2.3.3/stage1/genpeep differ
  2673. Binary files gcc-2.3.3/stage1/genrecog and my-gcc-2.3.3/stage1/genrecog differ
  2674. diff -r2cN gcc-2.3.3/toplev.c my-gcc-2.3.3/toplev.c
  2675. *** gcc-2.3.3/toplev.c    Sat Nov 28 22:10:54 1992
  2676. --- my-gcc-2.3.3/toplev.c    Sat Nov 28 22:31:03 1992
  2677. ***************
  2678. *** 473,476 ****
  2679. --- 473,477 ----
  2680.     {"writable-strings", &flag_writable_strings, 1},
  2681.     {"peephole", &flag_no_peephole, 0},
  2682. +   {"large-baserel", &flag_pic, 4},
  2683.     {"force-mem", &flag_force_mem, 1},
  2684.     {"force-addr", &flag_force_addr, 1},
  2685. ***************
  2686. *** 490,493 ****
  2687. --- 491,495 ----
  2688.     {"pic", &flag_pic, 1},
  2689.     {"PIC", &flag_pic, 2},
  2690. +   {"baserel", &flag_pic, 3},
  2691.     {"fast-math", &flag_fast_math, 1},
  2692.     {"common", &flag_no_common, 0},
  2693. ***************
  2694. *** 1454,1457 ****
  2695. --- 1456,1462 ----
  2696.        char *input_name;
  2697.   {
  2698. + #ifdef FILE_NAME_NONDIRECTORY
  2699. +   char *na = FILE_NAME_NONDIRECTORY (input_name);
  2700. + #else
  2701.     int len = strlen (input_name);
  2702.     char *na = input_name + len;
  2703. ***************
  2704. *** 1464,1467 ****
  2705. --- 1469,1473 ----
  2706.         na--;
  2707.       }
  2708. + #endif
  2709.   
  2710.   #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
  2711. ***************
  2712. *** 3287,3290 ****
  2713. --- 3293,3297 ----
  2714.   #ifndef OS2
  2715.   #ifndef VMS
  2716. + #ifndef amigados
  2717.     if (flag_print_mem)
  2718.       {
  2719. ***************
  2720. *** 3301,3304 ****
  2721. --- 3308,3312 ----
  2722.   #endif /* not USG */
  2723.       }
  2724. + #endif /* not amigados */
  2725.   #endif /* not VMS */
  2726.   #endif /* not OS2 */
  2727. diff -r2cN gcc-2.3.3/tree.c my-gcc-2.3.3/tree.c
  2728. *** gcc-2.3.3/tree.c    Thu Oct 22 12:00:22 1992
  2729. --- my-gcc-2.3.3/tree.c    Sat Nov 28 22:31:07 1992
  2730. ***************
  2731. *** 247,251 ****
  2732.   static int next_decl_uid;
  2733.   
  2734. ! extern char *mode_name[];
  2735.   
  2736.   void gcc_obstack_init ();
  2737. --- 247,251 ----
  2738.   static int next_decl_uid;
  2739.   
  2740. ! extern char *const mode_name[];
  2741.   
  2742.   void gcc_obstack_init ();
  2743.